Le Codage Base64 l'Authentification de Base de l'en-Tête HTTP Apache Client
Deux questions connexes, je suis en utilisant le Client HTTP Apache 4.x API. myHttpPost est une instance de HttpPost et myHttpClient est une instance de HttpClient. Je suis en train d'envoyer une demande à l'aide de l'authentification de base. J'ai donc un HttpClient et de créer un HttpPost.
La 'force brute' façon de régler une authentification de base de l'en-tête semble être de le mettre dans le HttpPost en-tête.
String encoding = Base64Encoder.encode("username" + ":" + "password");
myHttpPost.setHeader("Authorization", "Basic " + encoding);
L'exemple ci-dessus provient d'un autre débordement de pile question (ne peut pas trouver de lien pour maintenant). Par rapport à la Base64Encoder classe - forfait puis-je la trouver ou où puis-je la télécharger?
Question principale - j'ai été en espérant faire de l'authentification de base en plus de manière esthétique à l'aide du code ci-dessous:
myHttpClient.getCredentialsProvider().setCredentials(
new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthPolicy.BASIC),
new UsernamePasswordCredentials("username", "password")
);
Mais cela ne semble pas fonctionner. Donc, est le premier exemple ci-dessus, la bonne façon de faire de l'authentification de base HTTP Apache Client 4.0? Ou est-il un nettoyant/moyen plus simple.
OriginalL'auteur gamozzii | 2011-12-01
Vous devez vous connecter pour publier un commentaire.
Base64Encoder peut provenir de différentes endroits, je ne pouvais pas trouver quelque chose qui correspond à votre statique
encode
méthode.Que des informations d'Identification, vous devez définir
scheme
àBasic
sur votreAuthScope
, comme suit:ou
OriginalL'auteur Buhake Sindi
Je sais que c'est un très vieux post. Mais, je voulais juste répondre de sorte que d'autres bénéficieront à l'avenir:
Si vous utilisez un nom d'utilisateur qui doit être représenté à l'aide de largeur Variable de codage (http://en.wikipedia.org/wiki/Variable-width_encoding), alors assurez-vous de changer l'encodage utilisé pour former les octets pour (nom d'utilisateur:mot de passe) comme suit:
HttpParams params = new BasicHttpParams();
params.setParameter(AuthPNames.CREDENTIAL_CHARSET, HTTP.UTF_8);
Par défaut, l'encodage utilisé est HttpProtocolParams.HTTP_ELEMENT_CHARSET.
OriginalL'auteur garnet
HttpClient
ne tente pas de s'authentifier avec l'origine ou le serveur proxy sauf explicitement contestée. Je soupçonne que vous souhaitezHttpClient
pour authentifier de manière préventive. Alors que la préemption d'authentification est désactivée par défaut (et personnellement, je voudrais décourager de son application à l'extérieur sécurisé ou réseaux internes), on peut forcer la préemption d'authentification à l'aide de l'exemple ci-dessoushttp://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientPreemptiveBasicAuthentication.java
OriginalL'auteur ok2c
J'ai essayé la solution proposée dans http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientPreemptiveBasicAuthentication.java et il travaille pour de l'Encodage Base64 l'Authentification de Base.
Je suppose que le
fait le miracle 🙂
car sans cela, je reçois toujours "401 Unauthorized" HTTP de la réponse
OriginalL'auteur Kovács Ede