Comment puis-je ajouter une authentification de base pour le client par défaut de la bibliothèque httpClient ? J'ai vu des exemples où ils utilisent client.getCredentialProvider()
, cependant je crois que toutes ces méthodes sont pour la version 4.0.1 ou 3.x de la bibliothèque. Y a-t-il un nouvel exemple de comment faire cela ? Merci beaucoup.
Réponses
Trop de publicités?
Joe
Points
136
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("nom d'utilisateur", "mot de passe"));
CloseableHttpClient httpClient =
HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider).build();
Rusty
Points
415
N'avez-vous pas téléchargé l'exemple du site web ? Les exemples se trouvent ici : httpcomponents-client-4.1.3\examples\org\apache\http\examples\client
En ce qui concerne https, il suffit de consulter ClientAuthentication.java :
/*
* ====================================================================
*
* Conformément à une ou plusieurs ententes de licence de l'Apache Software Foundation (ASF),
* consultez le fichier NOTICE distribué avec le présent travail pour plus d'informations sur la propriété des droits d'auteur.
* L'ASF accorde à vous une licence sous la forme de l'Apache License, Version 2.0
* (la "Licence") ; vous ne pouvez utiliser ce fichier qu'en conformité avec la Licence.
* Vous pouvez obtenir une copie de la Licence à l'adresse
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* À moins qu'une exigence légale applicable ou un accord à l'écrit ne le nécessite, le logiciel
* distribué selon la Licence est distribué sur une base "TEL QUEL",
* SANS GARANTIES OU CONDITIONS D'AUCUNE SORTE, expresses ou implicites.
* Voir la Licence pour le langage spécifique régissant les autorisations et
* les limitations en vertu de la Licence.
* ====================================================================
*
* Ce logiciel est constitué de contributions volontaires faites par de nombreux
* individus pour le compte de l'Apache Software Foundation.
* Pour plus d'informations sur l'Apache Software Foundation, veuillez consulter
* .
*/
package org.apache.http.examples.client;
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.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
/**
* Un exemple simple qui utilise HttpClient pour exécuter une requête HTTP contre
* un site cible nécessitant une authentification utilisateur.
*/
public class ClientAuthentication {
public static void main(String[] args) throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
httpclient.getCredentialsProvider().setCredentials(
new AuthScope("localhost", 443),
new UsernamePasswordCredentials("username", "password"));
HttpGet httpget = new HttpGet("https://localhost/protected");
System.out.println("exécution de la requête" + httpget.getRequestLine());
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Longueur du contenu de la réponse : " + entity.getContentLength());
}
EntityUtils.consume(entity);
} finally {
// Lorsque l'instance de HttpClient n'est plus nécessaire,
// arrêtez le gestionnaire de connexion pour assurer
// la libération immédiate de toutes les ressources du système
httpclient.getConnectionManager().shutdown();
}
}
}
En résumé :
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getCredentialsProvider().setCredentials(
new AuthScope("localhost", 443),
new UsernamePasswordCredentials("username", "password"));
Barett
Points
876
Une autre option moderne pour 4.3 est d'utiliser l'extension Fluent:
Executor executor = Executor.newInstance()
.auth(new HttpHost("somehost"), "username", "password")
.auth(new HttpHost("securehost", 443, "https"), "username", "password") // exemple https
.auth(new HttpHost("myproxy", 8080), "username", "password")
.authPreemptive(new HttpHost("myproxy", 8080));
String content = executor.execute(Request.Get("http://somehost/"))
.returnContent().asString();
stefan
Points
51
Amit Singh
Points
31
J'avais cette exigence d'invocation d'une URL avec une authentification de base qui nécessitait également des paramètres de proxy. C'est ce qui a fonctionné pour moi.
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class TestResponse {
public final static String TESTURL="https://myURL";
private static final String PROXY_HOST = "www2.proxyXYS";
private static final int PROXY_PORT = 8080;
public static void main (String args[])
{
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(TESTURL);
HostConfiguration config = client.getHostConfiguration();
config.setProxy(PROXY_HOST, PROXY_PORT);
String username = "User";
String password = "Pa55w0rd";
Credentials credentials = new UsernamePasswordCredentials(username, password);
AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT);
client.getState().setProxyCredentials(authScope, credentials);
client.getState().setCredentials(AuthScope.ANY, credentials);
try {
client.executeMethod(method);
String response = method.getResponseBodyAsString();
if (method.getStatusCode() == HttpStatus.SC_OK) {
response = method.getResponseBodyAsString();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
method.releaseConnection();
}
}
}