Ich versuche Proxy für eine Anfrage zu setzen, die ich mit HttpClientBuilder
wie folgt mache:
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?
java.lang.RuntimeException: org.apache.http.conn.UnsupportedSchemeException: http-Protokoll ist nicht unterstützt
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.
%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 )
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
undAuthScope.ANY_PORT
wie in Ihrem Beispiel.
Der Kredit geht an Cetra
Verwandte Links:
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.