Preemptive Basic-Authentifizierung mit Apache HttpClient 4
Gibt es ein einfacher Weg, um das setup der http-client für preemptive basic-Authentifizierung als das, was beschrieben hier?
In der vorherigen version (3.x) es verwendet werden, um eine einfache Methode (z.B. httpClient.getParams().setAuthenticationPreemptive(true)
).
Das wichtigste, was ich vermeiden will ist das hinzufügen der BasicHttpContext zu jeder Methode, die ich ausführen.
InformationsquelleAutor yossis | 2010-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist schwierig, dies zu tun, ohne dabei einen Kontext, durch alle Zeit, aber wahrscheinlich können Sie es tun, indem eine request-interceptor. Hier ist etwas code, den wir verwenden (gefunden von Ihrer JIRA, iirc):
Die richtige URL: subversion.jfrog.org/jfrog/build-info/trunk/build-info-client/...
Ihre Website erfordert Authentifizierung; hast du einen link auch ohne Authentifizierung?
Und stellen Sie sicher, nicht zu vergessen die
0
als zweiten parameter füraddRequestInterceptor()
, als ohne Sie, Ihr interceptor aufgerufen wird, werden nach der HttpClient istRequestTargetAuthentication
, die sich realisiert als ein interceptor und die Prozesse derAuthState
erstellen Sie in Ihrem interceptor.In neueren Versionen
ClientContext
umbenanntHttpClientContext
,ExecutionContext
umbenanntHttpCoreContext
, und dieauthState.setXXX
Methoden ersetzt mitauthState.update(authScheme, creds)
.InformationsquelleAutor Mat Mannion
Wenn Sie schauen, um Kraft HttpClient 4, um die Authentifizierung mit einer einzelnen Anforderung, die die folgenden arbeiten:
request.addHeader(BasicScheme.authenticate(creds,"US-ASCII",false));
Wow!!! dies war viel einfacher als die plumpe Dokumentation Kapitel 4. HTTP-Authentifizierung. Danke!
Ich fügte hinzu, die Linie
request.addHeader(BasicScheme.authenticate(creds,"US-ASCII",false));
in einem HttpRequestInterceptor und das ist mein problem gelöst. Plz, geben Adam für diese Lösung eine weitere Medaille.BasicScheme.Authentifizierung ist veraltet HttpClient 4.
Wenn Sie möchten, verwenden Sie die Methoden nicht veraltet HttpClient 4.3:
request.addHeader(new BasicScheme().authenticate(creds, request, null))
. Die Signatur der Methode wirftAuthenticationException
aber es nie wirklich passiertBasicScheme
, so können Sie fangen die exception undthrow new AssertionError(e)
oder etwas ähnliches.InformationsquelleAutor Adam Batkin
Dies ist die gleiche Lösung wie Mat 's Mannion' s, aber Sie nicht haben, um localContext auf jede Anfrage. Es ist einfacher, aber es fügt Authentifizierung für ALLE Anfragen. Nützlich, wenn Sie don ' T haben die Kontrolle über einzelne Anfragen, wie in meinem Fall bei der Verwendung von Apache Solr, die verwendet HttpClient intern.
Natürlich, müssen Sie die Anmeldeinformationen Anbieter:
Den
AuthScope
muss nicht enthalten Reich, als es im Voraus nicht bekannt ist.authState.setAuthScheme()
undauthState.setCredentials()
ist veraltet,authState.update(new BasicScheme(), creds);
sollte stattdessen verwendet werden.Auch in den neueren Versionen
ClientContext
umbenanntHttpClientContext
, undExecutionContext
umbenanntHttpCoreContext
.InformationsquelleAutor Oliv
Viele der oben genannten Antworten verwenden, veraltet code. Ich bin mit Apache SOLRJ version 5.0.0.
Mein code besteht aus
Den PreemptiveAuthInterceptor ist jetzt wie folgt:-
Dieser code arbeitet mit apache httpclient 4.3.x
InformationsquelleAutor Brian teggart
Ein wenig spät zur party, aber ich kam durch den thread zu lösen versucht dies für die proxy-Autorisierung einer post-Anforderung. Hinzufügen Adam ' s Reaktion fand ich Folgendes bei mir funktioniert:
Dachte, das könnte hilfreich sein für alle anderen, die läuft in diese.
InformationsquelleAutor Jonathan
Ich denke, der beste Weg ist, tun Sie es einfach manuell. Ich fügte hinzu, die folgende Funktion
Klassischen Java:
...
HTTPRequestBase
kann eine InstanzHttpGet
oderHttpPost
Android:
...
InformationsquelleAutor Martin Konecny
Ich bin mit diesem code, basierend auf meiner Lektüre der der HTTPClient 4.5 docs:
...und stellen Sie sicher, dass Sie immer passieren, dass der Kontext zu
HTTPClient.execute()
.InformationsquelleAutor Chris Jones
Ich weiß nicht Recht bekommen Ihr schließen Kommentar. Es ist der HttpClient, dass alle, die Maschinen, die das tun, preemptive auth, und Sie haben nur einmal (wenn Sie konstruieren und konfigurieren Sie Ihre HttpClient). Sobald Sie das getan haben, konstruieren Sie Ihre Methode Instanzen der gleichen Weise wie immer. Sie glaube nicht, "fügen Sie die BasicHttpContext" der Methode.
Ihre beste Wette ist, denke ich, zu Ihrem eigenen Objekt, das festlegt, bis alle der junk-erforderlich für präemptives auth, und hat eine einfache Methode oder Methoden für das ausführen von Anfragen auf bestimmten HTTPMethod Objekte.
httpclient.execute(targetHost, httpget, localcontext);
Siehe meinen zweiten Absatz.
Sicher, das ist eine gute Idee, ich werde ein wenig warten, um zu sehen, ob jemand hat eine out-of-the-box-Lösung.
InformationsquelleAutor Jonathan Feinberg
in android,Matte Mannion ' s Antwort nicht auflösen kann, https,noch senden zwei Anfragen,die Sie tun können, wie unten beschrieben,ist der trick Anhängen authHeader mit dem user-agent:
InformationsquelleAutor ljian