Vorspiel
Beim Versuch, einen Curl-Befehl mit Basisauthentifizierung in zu emulieren Java ist es wichtig, Folgendes zu berücksichtigen:
HttpClient 3.0
public class HttpBasicAuth { // ... public static void main(String[] args) { // ... client.getState().setCredentials( new AuthScope("hostname"), // Use the IP address or hostname here new UsernamePasswordCredentials("username", "password") ); // ... } }
HttpClient 4.0.1
public class HttpBasicAuth { // ... public static void main(String[] args) { // ... DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.getCredentialsProvider().setCredentials( new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), new UsernamePasswordCredentials("username", "password") ); // ... } }
Häufiges Problem
In den Beispielen HttpClient 3.0 und 4.0.1 kann aufgrund einer ungültigen Bereichsdefinition ein interner Serverfehler (500) auftreten. Die richtige Bereichsdefinition hängt von der Konfiguration des Zielservers ab. Indem Sie den Bereich auf AuthScope.ANY_HOST und AuthScope.ANY_PORT festlegen, gehen Sie davon aus, dass die Anmeldeinformationen für jeden Host und Port gelten, was möglicherweise nicht der Fall ist. Durch Überprüfen der Zielserverkonfiguration und Verwenden der entsprechenden Bereichsdefinition sollte dieser Fehler behoben werden.
Alternative Methode (HttpClient 4.0.1)
Ein weiterer Ansatz zur Implementierung der Standardauthentifizierung mit HttpClient 4.0.1 lautet wie folgt:
public class HttpBasicAuth { // ... public static void main(String[] args) { // ... String encoding = Base64.getEncoder().encodeToString((user + ":" + pwd).getBytes()); HttpPost httpPost = new HttpPost("http://host:post/test/login"); httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding); // ... } }
Das obige ist der detaillierte Inhalt vonWie implementiert man die HTTP-Basisauthentifizierung in Java mit HttpClient: Häufige Fallstricke vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!