2010-06-02 16 views
7

J'ai des problèmes pour obtenir le code HTML d'un site Web en utilisant cet exemple de code.Android httpclient - Obtenir un fichier avec authentification préemptive

http://svn.apache.org/repos/asf/httpcomponents/httpclient/branches/4.0.x/httpclient/src/examples/org/apache/http/examples/client/ClientPreemptiveBasicAuthentication.java

Je dois utiliser celui ci-dessus, comme je l'ai besoin pour ma authentification préemptive application dans Android.

Je pensais que la solution pourrait être l'objet HttpGet, mais je reçois encore que des erreurs :( cf HttpGet HttpGet = new HttpGet ("/ index.html");

Est-ce que quelqu'un a une idée de comment obtenir le contenu du fichier, qui est spécifié dans l'objet HttpGet ci-dessus en utilisant le code exemple du lien. Il a certainement appelé, mais pour l'instant je ne peux obtenir le code d'état et ainsi de suite ...

Merci 4 aide

Répondre

13

Lorsque j'ai abordé cette question l'année dernière, j'ai abandonné l'authentification HTTP préemptive natif de HttpClient et juste rolled the header myself.

11

Alternative 1: S'il vous plaît lire Http Basic Authentication with Android qui propose une solution basée sur la HttpClient 4 official docs. Je n'ai pas testé par moi-même, donc je serais heureux de savoir si cela fonctionne vraiment.

Édition: Je viens de l'essayer et ça fonctionne comme un charme.

Alternative 2: Vous pouvez également ajouter l'en-tête HTTP « Autorisation » tel que proposé par @CommonsWare:

post.addHeader("Authorization", "Basic " + Base64.encode(username+":"+password)); 

Dans ce cas, vous avez besoin d'un encodeur base64 pour coder la chaîne contenant le nom d'utilisateur et mot de passe. Vous pouvez trouver beaucoup d'implémentations sur Internet.

9

Pour moi l'exemple ci-dessus n'a pas fonctionné sur Android. Je devais faire ce qui suit:

post.addHeader("Authorization", "Basic " + Base64.encodeToString((username+":"+password).getBytes(),Base64.NO_WRAP)); 
7

Merci janex.

Je devais faire la même chose sur Android.

post.addHeader("Authorization", "Basic " + Base64.encodeToString((username+":"+password).getBytes(),Base64.NO_WRAP)); 

acclamations

+0

j'utilisais Base64.DEFAULT et a été coincé avec elle pour le temps Looong! – advantej

+0

Incroyable. Merci beaucoup. Fonctionne comme un charme! – wwjdm

+0

Aussi, pourquoi devons-nous utiliser base64. Est-ce une norme? – wwjdm