Connexion HTTPS avec authentification basique résultat dans non autorisée
Je suis en train d'essayer d'accéder à Camp de base de l'API à partir de mon Android/Java code source de la manière suivante ....
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
public class BCActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DefaultHttpClient httpClient = new DefaultHttpClient();
//final String url = "https://encrypted.google.com/webhp?hl=en"; //This url works
final String url = "https://username:[email protected]/people.xml"; //This don't
HttpGet http = new HttpGet(url);
http.addHeader("Accept", "application/xml");
http.addHeader("Content-Type", "application/xml");
try {
// HttpResponse response = httpClient.execute(httpPost);
HttpResponse response = httpClient.execute(http);
StatusLine statusLine = response.getStatusLine();
System.out.println("statusLine : "+ statusLine.toString());
ResponseHandler <String> res = new BasicResponseHandler();
String strResponse = httpClient.execute(http, res);
System.out.println("________**_________________________\n"+strResponse);
System.out.println("\n________**_________________________\n");
} catch (Exception e) {
e.printStackTrace();
}
WebView myWebView = (WebView) this.findViewById(R.id.webView);
myWebView.loadUrl(url);//Here it works and displays XML response
}
}
Cette URL affiche la réponse en WebView
, mais montre non autorisée exception lorsque je tente d'accéder par le biais de HttpClient
comme indiqué ci-dessus.
Est que c'est en bon chemin pour accéder camp de base de l'API via Android/Java?
ou
Merci de me donner une bonne façon de le faire.
Vous devez vous connecter pour publier un commentaire.
La HttpClient ne peux pas prendre le login creditals à partir de l'URI.
Vous devez leur donner avec des méthodes indiquées.
Si vous utilisez HttpClient 4.x ont un coup d'oeil sur ceci:
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html
Mais attention si vous ne souhaitez pas utiliser la nouvelle version sur le HttpClient (Android utilise la version 3.x), vous devriez regarder ici:
http://hc.apache.org/httpclient-3.x/authentication.html
, C'était la théorie, maintenant, nous utilisons:
Fondamentalement, nous utilisons HTTP, mais si vous souhaitez utiliser HTTPS, vous devez modifier l'affectation suivante
new HttpHost("www.google.com", 80, "http")
ennew HttpHost("www.google.com", 443, "https")
.En outre, vous devez modifier l'hôte (http://www.google.com) pour vos préoccupations.
Avis: que le plein nom de domaine complet (FQDN) est nécessaire pour ne pas l'URI complète.
HttpClient 3.x:
HttpClient 4.x:
À l'Attention de: Vous aurez besoin de la nouvelle HttpClient de Apache et en plus vous devez réorganiser l'ordre, que le pot-fichier avant de le Android bibliothèque.
Enfin je l'ai eu Comment coller le code indiqué dans la réponse ci-dessus ...
Une chose très importante la Façon dont votre bibliothèque doivent être organisées et des bibliothèques que vous aurez besoin ...
De Ici vous trouverez ces bibliothèques.
Pour les ajouter dans eclipse (ci-Dessous Android sdk < 16)...
À les organiser dans l'ordre dans eclipse ...
Ci-dessus sdk Android >= 16 vous devrez mettre ces bibliothèques dans "libs" le dossier.
L'annexe sur l'excellent et très serviable réponse de CSchulz:
dans client http 4.3 ceci:
ne fonctionne plus (ClientContext.AUTH_CACHE est déconseillée)
utilisation:
et
voir http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/protocol/ClientContext.html
et:
http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/protocol/HttpClientContext.html
Si vous aimez utiliser les HttpClient 4.x comme mentionné dans les autres réponses que vous pourriez aussi
utilisation httpclientandroidlib. C'est un converti stock HttpClient sans apache.commons
et avec Android LogCat soutien.