Prélude
Lors de la tentative d'émulation d'une commande curl avec authentification Basic dans Java, il est crucial de considérer les éléments suivants :
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") ); // ... } }
Problème courant
Dans les exemples HttpClient 3.0 et 4.0.1, une erreur de serveur interne (500) peut se produire en raison d'une définition de portée non valide. La définition correcte de la portée dépend de la configuration du serveur cible. En définissant la portée sur AuthScope.ANY_HOST et AuthScope.ANY_PORT, vous supposez que les informations d'identification s'appliquent à n'importe quel hôte et port, ce qui peut ne pas être le cas. La vérification de la configuration du serveur cible et l'utilisation de la définition de portée appropriée devraient résoudre cette erreur.
Méthode alternative (HttpClient 4.0.1)
Une autre approche pour implémenter l'authentification de base à l'aide de HttpClient 4.0.1 est la suivante :
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); // ... } }
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!