Basic Authentication

Patrick123

Mitglied
Hallo zusammen,

ich kenne mich mit folgendem nicht so gut aus und hoffe, dass man versteht was ich meine:
Ich würde gerne auf eine Seite zugreifen bei der man sich über Basic Authentication anmelden muss. Wenn man die richtigen Login-Daten eingibt erscheint im Browser eine .json Datei. Diese würde ich dann gerne auslesen.
Mein bisheriger Code sieht folgendermaßen aus:
Java:
public class Connection {
    public static void main(String[] args) throws IOException, URISyntaxException{
    String benutzername = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    String passwort = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    String identnr = "R901358810_B7_933";
   
    UsernamePasswordCredentials creds = new UsernamePasswordCredentials(benutzername, passwort);
    System.out.println("User: "+creds.getUserPrincipal().getName());
    System.out.println("Password: "+creds.getPassword());
   
    String authString = benutzername + ":" + passwort;
    System.out.println("auth string: " + authString);
    byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
    String authStringEnc = new String(authEncBytes);
    System.out.println("Base64 encoded auth string: " + authStringEnc);
   
    URI uri = new URIBuilder()
            .setScheme("https")
            .setHost("xxxxxxxxxxxxxxxxxxx.com")
            .setPath("/api/v1/exemplar/serialnumber")
            .setParameter("identnumber", identnr).build();
    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpGet httpGet = new HttpGet(uri);
    System.out.println(httpGet.getURI());
    HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,
            HttpStatus.SC_OK, "OK");

            System.out.println(response.getProtocolVersion());
            System.out.println(response.getStatusLine().getStatusCode());
            System.out.println(response.getStatusLine().getReasonPhrase());
            System.out.println(response.getStatusLine().toString());
   
            System.out.println(
            Request.Get(uri)
            .connectTimeout(1000)
            .socketTimeout(1000)
            .execute().returnContent().asString());   
    }
}
Der ein oder andere Teil ist wahrscheinlich überflüssig - habe ich aber zum Probieren genutzt.
Ich bekomme einen Fehler bei der letzten Zeile:
Java:
Request.Get(uri)
            .connectTimeout(1000)
            .socketTimeout(1000)
            .execute().returnContent().asString()
Wie schon erwähnt habe ich leider nicht so viel Erfahrung damit.
Ich arbeite mit der Apache HttpClient Library (http://hc.apache.org/downloads.cgi)

Würde mich sehr über Anregungen und Tipps freuen!
Vielen Dank schonmal.

Gruß
Patrick
 

Patrick123

Mitglied
Konsolenausgabe:
Code:
...
Exception in thread "main" java.net.UnknownHostException: xxxxxxxxxxxxxxxxxxxxxxx.com
   at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
   at java.net.InetAddress$2.lookupAllHostAddr(Unknown Source)
   at java.net.InetAddress.getAddressesFromNameService(Unknown Source)
   at java.net.InetAddress.getAllByName0(Unknown Source)
   at java.net.InetAddress.getAllByName(Unknown Source)
   at java.net.InetAddress.getAllByName(Unknown Source)
   at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
   at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:112)
   at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)
   at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
   at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
   at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
   at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
   at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
   at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
   at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
   at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
   at org.apache.http.client.fluent.Request.internalExecute(Request.java:173)
   at org.apache.http.client.fluent.Request.execute(Request.java:177)
   at com.xxxxx.xxxxx.consoleclient.Connection.main(Connection.java:78)
Connection.java:78 ist in dem Fall:
Java:
System.out.println(Request.Get(uri)
            .connectTimeout(1000)
            .socketTimeout(1000)
            .execute().returnContent().asString());
 

Patrick123

Mitglied
Wie gesagt, bin leider sehr unerfahren bei dem Thema...
Deshalb sagt mir der Fehler und auch die zwei Links leider nicht all zu viel. Es kann keine Verbindung zu der von mir angegebenen Adresse aufgebaut werden und deshalb kann dort auch nichts abgerufen werden?
Ich weiß nicht, ob das hilft, aber wenn ich die im Code angegebene Adresse im Browser angebe, mich authentifiziere, dann sehe ich die JSON Datei, die ich dann auslesen möchte.
 

Patrick123

Mitglied
Mit curl kenne ich mich nicht aus. Ich habe über ein AddOn in Mozilla (HttpRequester) getestet, ob es funktioniert oder nicht. Wenn ich mit Hilfe des Addons die URL aufrufe erhalte ich den Inhalt der Seite - in dem Fall ein .json File.
 

mrBrown

Super-Moderator
Mitarbeiter
Also bei Basic auth. wird doch normalerweise nur in der URL username und password mit übergeben ala
Nö, normalerweise wird das im Header übergeben.
Gab nur diesen Weg ums mit'm Browser leichter zu machen, ist aber veraltet und wird auch von manchen Browsern nicht mehr unterstützt.

Aber Ja, er vergisst den Header mitzugeben.

Sollte aber nicht für das Problem verantwortlich sein, falsche Login-Daten führen nicht zu einer UnknownHostException.
Irgendwas wird vermutlich mit dem Link falsch sein.
 

Patrick123

Mitglied
Hey,

kannst du vllt ein kurzes Beispiel machen, wie ich den Header mitgeben kann? Wäre super!
Was könnte mit dem Link falsch sein? Ist es ein Unterschied ob ich den einfach im Browser eingebe oder ob ich ihn mittels Java "öffne" ?
Danke im Voraus!

Gruß
Patrick
 

Ähnliche Java Themen

Neue Themen


Oben