Maison  >  Article  >  Java  >  Comment effectuer une authentification HTTP de base avec HttpClient en Java ?

Comment effectuer une authentification HTTP de base avec HttpClient en Java ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-17 19:45:02418parcourir

How to Perform HTTP Basic Authentication with HttpClient in Java?

Authentification HTTP de base avec HttpClient en Java

Dans cet article, nous explorerons comment effectuer l'authentification de base HTTP à l'aide de la bibliothèque HttpClient en Java . L'authentification HTTP de base est un mécanisme d'authentification simple et largement utilisé qui permet à un client de fournir ses informations d'identification (nom d'utilisateur et mot de passe) pour accéder à une ressource protégée.

HttpClient 3.0

Vous avez mentionné avoir rencontré une erreur de serveur interne 500 lors de l'utilisation de HttpClient 3.0. Voici une version modifiée de votre code qui devrait fonctionner :

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {

            HttpClient client = new HttpClient();

            client.getParams().setAuthenticationPreemptive(true); // Add this line

            client.getState().setCredentials(
                    new AuthScope("ipaddress", 443, "realm"),
                    new UsernamePasswordCredentials("test1", "test1")
                    );

            PostMethod post = new PostMethod(
                    "http://address/test/login");

            post.setDoAuthentication( true );

            try {
                int status = client.executeMethod( post );
                System.out.println(status + "\n" + post.getResponseBodyAsString());
            } finally {
                // release any connection resources used by the method
                post.releaseConnection();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

HttpClient 4.0.1

Pour HttpClient 4.0.1, vous pouvez essayer le code suivant :

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            DefaultHttpClient httpclient = new DefaultHttpClient();

            httpclient.getCredentialsProvider().setCredentials(
                    new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), 
                    new UsernamePasswordCredentials("test1", "test1"));

            // Add this line
            httpclient.setPreemptiveAuth(true); 

            HttpPost httppost = new HttpPost("http://host:post/test/login");

            System.out.println("executing request " + httppost.getRequestLine());
            HttpResponse response;
            response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();

            System.out.println("----------------------------------------");
            System.out.println(response.getStatusLine());
            if (entity != null) {
                System.out.println("Response content length: " + entity.getContentLength());
            }
            if (entity != null) {
                entity.consumeContent();
            }

            httpclient.getConnectionManager().shutdown();  
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

Alternative Solution

Si vous continuez à rencontrer des problèmes, vous pouvez essayer une solution alternative en utilisant la bibliothèque Apache HttpComponents. Voici un exemple :

String encoding = Base64.getEncoder().encodeToString((user + ":" + pwd).getBytes());
HttpPost httpPost = new HttpPost("http://host:post/test/login");
httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding);

System.out.println("executing request " + httpPost.getRequestLine());
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn