Wie verwende ich HttpClientBuilder mit Http-Proxy?

7

Ich versuche Proxy für eine Anfrage zu setzen, die ich mit HttpClientBuilder wie folgt mache:

%Vor%

wo Builder ist:

%Vor%

Allerdings bekomme ich diese Ausnahme, wenn ich diese Anfrage ausführe:

%Vor%

(Ausnahme wegen Kürze verkürzt)

Da dies ein HTTP-Proxy ist, möchte ich das Schema nicht in HTTPS ändern, was sowieso nicht funktioniert. Wie bekomme ich das zum Laufen?

    
jobin 28.03.2016, 18:03
quelle

3 Antworten

15
  

java.lang.RuntimeException:   org.apache.http.conn.UnsupportedSchemeException: http-Protokoll ist nicht   unterstützt

Warum tritt dieses Problem auf? >

Antwort: Dies geschieht tatsächlich, weil you forget to register a connection socket factory for the 'http' scheme .

Plain 'http' Schema muss verwendet werden, um eine Zwischenverbindung herzustellen an den Proxy selbst vor 'https' tunnelling könnte eingesetzt werden.

Aus betrieblichen Gründen können Sie diesen Code ausprobieren:

%Vor%

Ich würde Ihnen auch einen einfachen Code für Ihre Recherche vorschlagen. Hoffe es kann dich retten.

ClientExecuteProxy.java

%Vor%

Verwenden Sie die CloudantClient-Java-API für Cloudant DB?

Antwort:

Wenn JA, dann stellte sich heraus, dass das Problem mit HTTP bei der Einstellung eines Proxys ein Fehler an unserem Ende war (tut mir leid). Wir haben released 1.2.1 mit dem Update für dieses Problem. Sie können die JAR-Datei von hier herunterladen. (Gesammelt von mike-rhodes 'Antwort )

AKTUALISIEREN

  

Wie lege ich hier die Anmeldedaten für den Proxy fest?

Von HTTP-Authentifizierung ,

Standardmäßig stellt httpclient keine Anmeldeinformationen vor, it will first create a HTTP request without authentication parameters . Dies ist als Sicherheitsvorkehrung und als Teil der Spezifikation vorgesehen. Dies führt jedoch zu Problemen, wenn Sie die Verbindung nicht erneut versuchen, oder wo immer Sie eine Verbindung herstellen, dass Sie Authentifizierungsdetails für die erste Verbindung senden. Es verursacht außerdem eine zusätzliche Latenzzeit für eine Anforderung, da mehrere Aufrufe erforderlich sind und 401s in den Protokollen angezeigt werden.

Die Problemumgehung besteht darin, einen Authentifizierungscache zu verwenden, um vorzutäuschen, dass Sie bereits einmal eine Verbindung mit dem Server hergestellt haben. Dies bedeutet, dass Sie nur einen HTTP-Aufruf durchführen.

%Vor%
  

N.B: Sie müssen dem Host vertrauen, mit dem Sie sich verbinden, und wenn Sie es sind   Mit HTTP werden Ihr Benutzername und Passwort in Klartext gesendet   (Nun, Base64, aber das zählt nicht).

     

Sie sollten auch ein viel spezifischeres Authscope verwenden als   Verlassen auf AuthScope.ANY_HOST und AuthScope.ANY_PORT wie in Ihrem   Beispiel.

Der Kredit geht an Cetra

Verwandte Links:

  1. HttpClientBuilder basic auth
  2. Apache HttpClient 4.1 - Proxy-Authentifizierung
SkyWalker 01.04.2016 11:07
quelle
2

Ich denke, das Problem ist mit Ihrem HttpClient, nicht der Proxy. Haben Sie versucht, Ihren HttpClient mit Hilfe von HttpClientBuilder.build ()

zu erstellen %Vor%     
An Do 28.03.2016 18:47
quelle
2

Was Sie haben, sollte sehr nah an der Arbeit sein. Ich würde die folgenden einfachen Änderungen vornehmen:

%Vor%

Löschen Sie den Aufruf, umSystemProperties zu verwenden. Es ist nicht gut dokumentiert, aber wenn Sie den Proxy (wie in der nächsten Zeile) setzen, überschreibt er dies, also entfernen Sie einfach diese Zeile.

%Vor%

Rufen Sie den HttpHost-Konstruktor mit dem expliziten Parameter 'scheme' auf. Dies ist, wo Sie den Fehler erhalten, also machen Sie es explizit:

%Vor%

Hinweis: Sie haben es nicht gesagt, aber basierend auf der Verwendung von "BasicCredentialsProvider" erhalten Sie nur eine "Basis" -Authentifizierung. Basic ist nur verschlüsselt und nicht wirklich sicher. Für Digest oder NTLM oder Kerberos benötigen Sie anderen Code.

    
JoeG 07.04.2016 18:41
quelle

Tags und Links