Authentification avec l'authentification de base en Java
Pour émuler la commande curl, qui utilise l'authentification de base pour les requêtes HTTP, on peut utiliser la bibliothèque HttpClient en Java. Cependant, certains problèmes ont été rencontrés lors de l'utilisation de cette bibliothèque.
Lors de la première tentative d'utilisation de Commons HttpClient 3.0, une erreur de serveur interne 500 a été renvoyée. Le code en question est :
import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.PostMethod; ... // Set authentication credentials client.getState().setCredentials( new AuthScope("ipaddress", 443, "realm"), new UsernamePasswordCredentials("test1", "test1") ); ...
La même erreur s'est produite lors de l'utilisation de Commons HttpClient 4.0.1 :
import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; ... // Set authentication credentials httpclient.getCredentialsProvider().setCredentials( new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), new UsernamePasswordCredentials("test1", "test1") ); ...
Le problème réside dans la manière dont l'authentification est gérée. L'approche correcte pour l'authentification de base à l'aide de HttpClient 4 consiste à définir l'en-tête « Autorisation » avant d'envoyer la demande :
// Create a Base64 encoded string for the credentials String encoding = Base64.getEncoder().encodeToString((user + ":" + pwd).getBytes()); // Create the HTTP request with the correct header HttpPost httpPost = new HttpPost("http://host:port/test/login"); httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding); // Execute the request and handle the response accordingly HttpResponse response = httpClient.execute(httpPost);
En suivant cette méthode, l'authentification de base peut être implémentée avec succès à l'aide de la bibliothèque HttpClient en Java.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!