4 Stimmen

Wie zu tun http Post mit Apache httpclient mit Web-Authentifizierung?

Ich habe viel danach gesucht und konnte keine vernünftige Lösung finden. Die eine mit Anmeldeinformationen Anbieter ist schlecht, wie es die doppelte Menge der Anrufe im Gegensatz zu dem, was erforderlich ist, d.h. es feuert die Anforderung, erhält eine 401 und nur dann feuert die Anforderung mit der Web-Authentifizierung Anmeldeinformationen.

Wer hat Android's httpclient Bibliothek verwendet, um http Post-Anforderungen an eine URL hinter Web-Auth erfolgreich zu tun?

5voto

Jens Punkte 16639

Für HttpClient 4.0.x verwenden Sie einen HttpRequestInterceptor, um die präemptive Authentifizierung zu aktivieren - da die AndroidHttpClient Klasse stellt nicht die addRequestInterceptor(..) Methode müssen Sie wahrscheinlich die DefaultHttpClient Klasse.

Dieses Beispiel wird Spam user1 / user1 an jeden interessierten Server. Einstellen der AuthScope wenn Ihnen die Sicherheit auch nur ein bisschen am Herzen liegt.

DefaultHttpClient client = new DefaultHttpClient();
client.getCredentialsProvider().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user1", "user1"));
client.addRequestInterceptor(new HttpRequestInterceptor() {
    public void process(HttpRequest request, HttpContext context) throws HttpException, IOException {
        AuthState state = (AuthState) context.getAttribute(ClientContext.TARGET\_AUTH\_STATE);
        if (state.getAuthScheme() == null) {
            BasicScheme scheme = new BasicScheme();
            CredentialsProvider credentialsProvider = (CredentialsProvider) context.getAttribute(ClientContext.CREDS\_PROVIDER);
            Credentials credentials = credentialsProvider.getCredentials(AuthScope.ANY);
            if (credentials == null) {
                throw new HttpException();
            }
            state.setAuthScope(AuthScope.ANY);
            state.setAuthScheme(scheme);
            state.setCredentials(credentials);
        }
    }
}, 0); // 0 = first, and you really want to be first.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X