172 votes

Authentification de base http en Java utilisant HttpClient ?

J’essaie d’imiter la fonctionnalité de cette commande curl en Java :

J’ai écrit ce qui suit à l’aide de Commons HttpClient 3.0 mais de toute façon fini par trouver une `` à partir du serveur. Quelqu'un peut-il me dire si je fais quelque chose de mal ?

Et plus tard, j’ai essayé un HttpClient communes 4.0.1 mais toujours la même erreur :

214voto

Buhake Sindi Points 38654

Avez vous essayé ceci (en utilisant HttpClient version 4)

125voto

Legend Points 29504

OK, donc celle-ci fonctionne. Juste au cas où quelqu'un le veut, voici la version qui fonctionne pour moi  :)

17voto

Mario Points 591

C’est le code de la réponse acceptée ci-dessus, avec les quelques modifications apportées concernant le codage Base64. Le code suivant compile.

14voto

Une petite mise à jour - nous l’espérons utile pour quelqu'un - cela fonctionne pour moi dans mon projet :

  • J’utilise la classe agréable du domaine Public Base64.java de Robert Harder (Merci Robert - Code disponible ici : Base64 - télécharger et mettez-le dans votre forfait).
  • et faire un téléchargement d’un fichier (image, doc, etc.) avec authentification et écrire sur le disque local

Exemple :

7voto

Bruno Points 47560

Ici sont quelques points:

  • Vous pourriez envisager de passer à HttpClient 4 (de manière générale, si vous le pouvez, je ne pense pas que la version 3 est encore activement pris en charge).

  • 500 code d'état d'erreur de serveur, de sorte qu'il pourrait être utile de voir ce que le serveur dit (aucun indice dans le corps de la réponse de l'impression?). Bien qu'il pourrait être causé par votre client, le serveur ne devrait pas échouer cette façon (un code d'erreur 4xx serait plus approprié si la demande est incorrect).

  • Je pense que setDoAuthentication(true) est la valeur par défaut (pas sûr). Ce qui pourrait être utile à faire est d'essayer de préemption de l'authentification fonctionne mieux:

    client.getParams().setAuthenticationPreemptive(true);
    

Sinon, la principale différence entre curl -d "" et ce que vous faites en Java, c'est que, en plus de Content-Length: 0, curl envoie Content-Type: application/x-www-form-urlencoded. Notez que, en termes de conception, vous devriez probablement vous envoyer une entité avec votre POST demande de toute façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X