Http Header, Http Proxy

Patrick123

Mitglied
Hallo zusammen,

ich würde gerne mit Hilfe der Library "Apache Http Client" auf eine URL zugreifen, die eine JSON-Datei anzeigt und diese auslesen. Es ist ein Http-Proxy und eine Basic Authentication mittels Http-Header notwendig. Als Header muss Authorization Basic „username : password Base64 encodiert“ gesetzt sein.
Leider bin ich nun nach ettlichen Versuchen an einem Punkt angekommen, an dem ich einfach nicht mehr weiß was ich noch anderst machen kann...
Hier einer meiner Versuche:
Java:
public static void main(String[] args) throws Exception {

        // ************PROXY************
        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(new AuthScope("xx-proxy-xxxx.xxxx.com", 8080),
                new UsernamePasswordCredentials("de\\xxxxx", "xxxxxxxxx"));
        credsProvider.setCredentials(new AuthScope("https://xxxxxxxx.com/api/v1/exemplar/serialnumber?identnumber=xxxxxxxxxxxx", 8080),
                new UsernamePasswordCredentials("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                        "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
        CloseableHttpClient httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
        try {
            HttpHost target = new HttpHost("xxxxxxxx.com/api/v1/exemplar/serialnumber?identnumber=xxxxxxxxxxxx", 8080, "https");
            HttpHost proxy = new HttpHost("xx-proxy-xxxx.xxxx.com", 8080);

            RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
            HttpGet httpget = new HttpGet("https://xxxxxxxx.com/api/v1/exemplar/serialnumber?identnumber=xxxxxxxxxxxx");
            httpget.setConfig(config);

            System.out.println("Executing request " + httpget.getRequestLine() + " to " + target + " via " + proxy);

            CloseableHttpResponse response = httpclient.execute(target, httpget);
            try {
                System.out.println("----------------------------------------");
                System.out.println(response.getStatusLine());
                System.out.println(EntityUtils.toString(response.getEntity()));
            } finally {
                response.close();
            }
        } finally {
            httpclient.close();
        }
        // ************BASIC AUthentication************
        try {
            String webPage = "https://xxxxxxxx.com/api/v1/exemplar/serialnumber?identnumber=xxxxxxxxxxxx";
            String name = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
            String password = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

            String authString = name + ":" + password;
            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);

            URL url = new URL(webPage);
            URLConnection urlConnection = url.openConnection();
            urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
            InputStream is = urlConnection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);

            int numCharsRead;
            char[] charArray = new char[1024];
            StringBuffer sb = new StringBuffer();
            while ((numCharsRead = isr.read(charArray)) > 0) {
                sb.append(charArray, 0, numCharsRead);
            }
            String result = sb.toString();

            System.out.println("*** BEGIN ***");
            System.out.println(result);
            System.out.println("*** END ***");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
       
        // ************ABFRAGE************
        HttpGet httpGet = new HttpGet("https://xxxxxxxx.com/api/v1/exemplar/serialnumber?identnumber=xxxxxxxxxxxx");
        CloseableHttpResponse response1 = httpclient.execute(httpGet);
        try {
            System.out.println(response1.getStatusLine());
            HttpEntity entity1 = response1.getEntity();
            EntityUtils.consume(entity1);
        } finally {
            response1.close();
        }
    }

Würde mich über Anregungen, Tipps oder vielleicht sogar Beispiele sehr freuen!

MfG
 

Patrick123

Mitglied
Das ist die Ausgabe der Konsole:
Code:
Executing request GET https://xxxxxxxxxxxxxxxxx.com/api/v1/exemplar/serialnumber?identnumber=xxxxxxxxxxxxxxxxxxx HTTP/1.1 to https://xxxxxxxxx.com/api/v1/exemplar/serialnumber?identnumber=xxxxxxxxxxxxx:8080 via http://xx-proxy-xxxx.xxxxx.com:8080
----------------------------------------
HTTP/1.1 400 Bad Request
<HTML><HEAD>
<TITLE>Request Error</TITLE>
</HEAD>
<BODY>
<img src="http://www.intranet.xxxxx.com/app/review/ctu/images/xxxxxx.gif" width="126" height="28">
<FONT face="Helvetica">
</FONT>
<blockquote>
<TABLE border=0 cellPadding=1 width="80%">
<TR><TD>
<FONT face="Helvetica">
<big>Request Error (invalid_request)</big>
<BR>
<BR>
</FONT>
</TD></TR>
<TR><TD>
<FONT face="Helvetica">
Your request could not be processed. Request could not be handled
<BR>
<BR>
Detailed technical information:<BR><BR>
URL: <BR>
Category(ies): <BR><BR>
Proxy: si0psg01<BR>
Client Adress: 10.8.0.183<BR>
Time: [26/10/2017:09:34:54 GMT]<BR>
User: \<BR>
</FONT>
</TD></TR>
<TR><TD>
<FONT face="Helvetica">
This could be caused by a misconfiguration, or possibly a malformed request.
</FONT>
</TD></TR>
<TR><TD>
<FONT face="Helvetica" SIZE=2>
<BR>
For assistance, contact CI-Hotline at 3311 <br>&nbsp;&nbsp;&nbsp;<u>SMT Information</u>: Product Name & Initiator Script =>  <i>Internet Web Access</i> .
</FONT>
</TD></TR>
</TABLE>
</blockquote>
</FONT>
</BODY></HTML>

auth string: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Base64 encoded auth string: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
java.net.UnknownHostException: xxxxxxxxx.com
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
    at sun.security.ssl.BaseSSLSocketImpl.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
    at ClientProxyAuthentication.main(ClientProxyAuthentication.java:78)
Exception in thread "main" java.lang.IllegalStateException: Connection pool shut down
    at org.apache.http.util.Asserts.check(Asserts.java:34)
    at org.apache.http.pool.AbstractConnPool.lease(AbstractConnPool.java:189)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.requestConnection(PoolingHttpClientConnectionManager.java:257)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:176)
    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:108)
    at ClientProxyAuthentication.main(ClientProxyAuthentication.java:100)

Leider verstehe ich nicht wirklich, was mir diese Ausgabe sagen will. Auch die "UnknownHostException" hilft mir nicht auf die Sprünge.
 

Thallius

Top Contributor
Ich habe keine Ahnung was du da alles machst aber warum versuchst du es nicht einfach mal so:

Code:
       try {
           URL url = new URL ("http://ip:port/");
           String encoding = Base64.getEncoder().encodeToString(("test1:test1").getBytes(‌"UTF‌-8"));

           HttpURLConnection connection = (HttpURLConnection) url.openConnection();
           connection.setRequestMethod("POST");
           connection.setDoOutput(true);
           connection.setRequestProperty  ("Authorization", "Basic " + encoding);
           InputStream content = (InputStream)connection.getInputStream();
           BufferedReader in   =
               new BufferedReader (new InputStreamReader (content));
           String line;
           while ((line = in.readLine()) != null) {
               System.out.println(line);
           }
       } catch(Exception e) {
           e.printStackTrace();
       }
 
X

Xyz1

Gast
Du baust das viel zu kompliziert auf. Stelle die paar Felder halt selbst zusammen. Desweiteren: Ja, Unknown Host bedeutet, die festgelegte Adresse kann nicht aufgelöst werden.

Desweiteren: Alles im Quelltext per Hand durch x ersetzen kann schnell dazu führen das man 'etwas' vergisst. Mit 'Etwas' sind hier sensible Informationen gemeint, die besser nicht im Internet seien.
 

Patrick123

Mitglied
Wenn ich das im Browser eingebe muss ich mich erstmal über ein "Anmeldefenster" das aufpoppt authentifizieren. Nachdem ich das gemacht habe sehe ich den Inhalt einer JSON Datei.
Das soll eigentlich nur die Anmeldung am Proxy sein, ja. Da ich aber viel rumprobiert habe, ist da auch noch ein Versuch der Basis Authentifizierung mit dabei...
 

Thallius

Top Contributor
Hast du wirklich genau den link auch genommen den du im source benutzt hast? Glaube ich nämlich nicht. Du hast bestimmt irgendwo etwas anders
 

JStein52

Top Contributor
Ist irgendwie erkennbar ob das
Code:
HTTP/1.1 400 Bad Request
vom Proxy oder von deinem Zielrechner kommt ?
 

Patrick123

Mitglied
Ich habe sowohl im Code, als auch beim Testen im Browser, die gleiche URL verwendet.

In dem Fall ist das glaube ich leider nicht erkennbar - zumindest für mich nicht...
 
X

Xyz1

Gast
Patrick123 wieso hörst du nicht auf meinen Rat?
Java:
    private static byte[] httpAuthAndProxyTest() throws IOException {
        ByteBuffer byteBuffer = ByteBuffer.allocate(1000 * 1000);

        URL url = new URL("https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx");
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("202.129.41.91", 8081));
        URLConnection openConnection = url.openConnection(proxy);
        openConnection.addRequestProperty("Authorization", "Basic aHR0cHdhdGNoOmZmZg==");
        try (InputStream inputStream = openConnection.getInputStream()) {
            int read;
            while ((read = inputStream.read()) != -1) {
                byteBuffer.put((byte) read);
            }
        }

        byte[] b = new byte[byteBuffer.position()];
        byteBuffer.rewind();
        byteBuffer.get(b);
        return b;
    }

Das liefert dir den 'Inhalt' als Byte Array vorher umgeleitet über en Proxy...

Das wird in dem Fall über Thailand geschickt (solange der Proxy noch gültigkeit hat...).
1234321.gif
(Das mit 'byteBuffer' ist nicht ganz so toll).

Bearbeitung: Diese authentication wird hier erläutert:
https://www.httpwatch.com/httpgallery/authentication/
 
Zuletzt bearbeitet von einem Moderator:

Patrick123

Mitglied
@JStein52: Ich habe mal die Anmeldedaten am Proxy geändert. Es kommt die gleiche Fehlermeldung.
@DerWissende: Ich habe mal den Code mit meinen Daten getestet. Es erscheint folgende Fehlermeldung:
Code:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 401 for URL: https://xxxxxxxxxxxxxxxxxxxxx.com/api/v1/exemplar/serialnumber?identnumber=xxxxxxxxxxxxxxxxxxx
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
    at tests.httpAuthAndProxyTest(tests.java:23)
    at tests.main(tests.java:11)
 

Patrick123

Mitglied
Wenn ich die URL im Browser eingebe und diese auch funktioniert, sprich nach erfolgreicher Authentifizierung bekomme ich den Inhalt einer JSON angezeigt, aber nicht den scheinbar "richtigen" Proxy im Browser eingetragen habe, dann benötige ich in meinem Programm ja auch nicht den scheinbar "richtigen" Proxy, oder?
 
X

Xyz1

Gast
Von einer Anmeldung am Proxy hast du im Vorfeld nüschst gesagt - oder ich habe es überlesen:
https://stackoverflow.com/questions/1626549/authenticated-http-proxy-with-java
Zweite Frage: Fällt die Anmeldung an der Internetseite weg dann?

401 Unauthorized Die Anfrage kann nicht ohne gültige Authentifizierung durchgeführt werden. Wie die Authentifizierung durchgeführt werden soll, wird im „WWW-Authenticate“-Header-Feld der Antwort übermittelt.
401 kann in dem Fall sowohl von der Internetseite stammen als auch vom Proxy. :oops:

Dritte Frage: Was hast du in deinem Browser eingetippert? Also möchte ich jetzt NICHT den Benutzernamen und den Passwort wissen, sondern das was/wie.

Vierte Frage: Wenn du magst, nenn mir einfach die Bezeichnung/Adrre. des Proxys.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Rest- Api mit HTTP BASIC Authentication Java Basics - Anfänger-Themen 16
L Webseite aufrufen (HTTP) Java Basics - Anfänger-Themen 8
P Maven-Dependencies (package org.apache.http.nio does not exist) Java Basics - Anfänger-Themen 6
S XML mittels HTTP Get Anfrage Java Basics - Anfänger-Themen 4
W Netwerkprogrammierung und Http Server Java Basics - Anfänger-Themen 10
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
W HTTP-Stream auf Ajax umbauen Java Basics - Anfänger-Themen 7
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
K URL ohne http:// Java Basics - Anfänger-Themen 8
F HTTP Get Queue Java Basics - Anfänger-Themen 7
J HTTP Request auf eine PHP Session Java Basics - Anfänger-Themen 1
E HTTP Client - Login durchführen? Java Basics - Anfänger-Themen 4
T Input/Output HTTP 403 aber im Browser gehts Java Basics - Anfänger-Themen 2
G Kraken HTTP Sniffer: ExceptionInInitializerError (Nutzt JNI) Java Basics - Anfänger-Themen 2
O get HTTP Headers Java Basics - Anfänger-Themen 5
L Methodenzerlegung HTTP Java Basics - Anfänger-Themen 4
S HTTP Adresse von offenem Browserfenset einlesen Java Basics - Anfänger-Themen 6
C HTTP POST-Request Java Basics - Anfänger-Themen 3
G http-Port beim Apache Tomcat ändern Java Basics - Anfänger-Themen 1
G HTTP Server Java Basics - Anfänger-Themen 2
S HTTP Request Umlaut Problem Java Basics - Anfänger-Themen 3
N Http-Request : Google Suche Java Basics - Anfänger-Themen 6
G http-Request auf Apache Tomcat Java Basics - Anfänger-Themen 13
G HTTP Body? Java Basics - Anfänger-Themen 4
A HTTP-Request Java Basics - Anfänger-Themen 15
K Problem mit javax/servlet/http/HttpServletRequest.java Java Basics - Anfänger-Themen 2
J Mehrdimensionales Array im Http-Request Java Basics - Anfänger-Themen 5
M Http Redirect Java Basics - Anfänger-Themen 5
M HTTP-Anfragen und Socket Java Basics - Anfänger-Themen 2
T mit einem string der form"[url]http://www.*.*/*"[/url] datei Java Basics - Anfänger-Themen 3
J HTTP Request Auslösen Java Basics - Anfänger-Themen 2
P HTTP-Request Parameter übergeben Java Basics - Anfänger-Themen 8
G http client Java Basics - Anfänger-Themen 4
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
C Klassen JTable wird ohne Header aufgebaut Java Basics - Anfänger-Themen 6
S Header- Datei erzeugen mit javah Java Basics - Anfänger-Themen 1
F JButton wie selektierter JTabbebPane-Header Java Basics - Anfänger-Themen 7
K JTable AbstractTableModel Header setzen Java Basics - Anfänger-Themen 6
T iText Header Java Basics - Anfänger-Themen 3
H Eclipse Sync ohne File Header Java Basics - Anfänger-Themen 2
S Header von JTable lesen Java Basics - Anfänger-Themen 6
J JTable : Ausrichtung der Header Java Basics - Anfänger-Themen 4
C Antwort header anzeigen Java Basics - Anfänger-Themen 5
H Header von Textfile bearbeiten Java Basics - Anfänger-Themen 14
D JTable Header überschreiben. Java Basics - Anfänger-Themen 5
A table. kein header. kein scrollpane. Java Basics - Anfänger-Themen 5
G ersatz für header.h in java ? swict-case kanns nicht richtig Java Basics - Anfänger-Themen 6
S jTable - Header entfernen/ausblenden Java Basics - Anfänger-Themen 2
S Auslesen von Komponente aus Header Java Basics - Anfänger-Themen 2
G Header auslesen. Problem. Java Basics - Anfänger-Themen 40
N Header für Mail Java Basics - Anfänger-Themen 5
C Reading a page header with getHeaderField Java Basics - Anfänger-Themen 13
F Eigener IP-Paket-Header Java Basics - Anfänger-Themen 15
B File Header mit Java einlesen. Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben