HttpClient 4.2, la Autenticación Básica, y AuthScope

Tengo una aplicación que se conecta a los sitios que requieren autenticación básica. Los sitios se proporciona en tiempo de ejecución y no se conoce en tiempo de compilación.

Estoy usando HttpClient 4.2.

No estoy seguro de si el código a continuación es cómo se supone que debo especificar la autenticación básica, pero la documentación que sugieren que es. Sin embargo, no sé qué pasa en el constructor de AuthScope. Yo había pensado que un parámetro null significaba que las credenciales suministradas debe ser utilizado para todas las URLs, pero lanza un NullPointerException, por lo que claramente estoy equivocado.

m_client = new DefaultHttpClient();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(m_userName, m_password);
((DefaultHttpClient)m_client).getCredentialsProvider().setCredentials(new AuthScope((HttpHost)null), credentials);
cliente.getCredentialsProvider(). setCredentials( nueva AuthScope(proxyHost, proxyPort), nueva UsernamePasswordCredentials( proxyUser, proxyPassword)); Esta es la manera correcta

OriginalEl autor user265330 | 2012-06-01

2 Kommentare

  1. 8

    AuthScope.CUALQUIER es lo que está después de: http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/auth/AuthScope.html

    Intente esto:

        final HttpClient client = new HttpClient();
        client.getParams().setAuthenticationPreemptive(true);
        client.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(user.getUsername(), user.getPassword()));
        final GetMethod method = new GetMethod(uri);
        client.executeMethod(method);
    Gracias Adrián. No tengo un getState método en el cliente, pero creo que son sólo el uso de diferentes versiones. Traté de AuthScope.ANY como usted sugiere y funcionó, gracias. ¿Puedo hacer otra pregunta – es el setAuthenticationPreemptive(true) es necesario/recomendable?
    Me tomó un tiempo para ver este comentario. El setAuthenticationPreemptive(true) significa que el crendentials será enviado en la petición inicial, sin necesidad de una tentativa de la primera solicitud, sin credenciales y, a continuación, obtener un plan 401 y, a continuación, proporcionándoles una vez desafió.
    Este no se dispone de métodos en HttpClient4.1

    OriginalEl autor Kieran

  2. 3

    De al menos la versión 4.2.3 (supongo que después de la versión 3.X), la aceptó respuesta no es válida. En su lugar, hacer algo como:

    private HttpClient createClient() {
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setContentCharset(params, "UTF-8");
    
        Credentials credentials = new UsernamePasswordCredentials("user", "password");
        DefaultHttpClient httpclient = new DefaultHttpClient(params);
        httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, credentials);
    
        return httpclient;
    }

    El JavaDoc de AuthScope.ANY dice En las futuras versiones de HttpClient el uso de este parámetro será descontinuado, a fin de utilizar a su propio riesgo. Una mejor opción sería el uso de uno de los constructores definidos en AuthScope.

    Para una discusión sobre cómo realizar peticiones preferente, ver:

    Preferente la autenticación Básica con Apache HttpClient 4

    OriginalEl autor Magnilex

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea