Rumah  >  Artikel  >  Java  >  Bagaimana untuk Melakukan Pengesahan Asas HTTP dengan HttpClient di Java?

Bagaimana untuk Melakukan Pengesahan Asas HTTP dengan HttpClient di Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-17 19:45:02414semak imbas

How to Perform HTTP Basic Authentication with HttpClient in Java?

Pengesahan Asas HTTP dengan HttpClient dalam Java

Dalam artikel ini, kami akan meneroka cara melaksanakan Pengesahan Asas HTTP menggunakan perpustakaan HttpClient di Java . Pengesahan Asas HTTP ialah mekanisme pengesahan yang mudah dan digunakan secara meluas yang membolehkan pelanggan memberikan bukti kelayakannya (nama pengguna dan kata laluan) untuk mengakses sumber yang dilindungi.

HttpClient 3.0

Anda menyebut menghadapi Ralat Pelayan Dalaman 500 semasa menggunakan HttpClient 3.0. Berikut ialah versi ubah suai kod anda yang sepatutnya berfungsi:

    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

Untuk HttpClient 4.0.1, anda boleh mencuba kod berikut:

    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();
        }
}

Penyelesaian Alternatif

Jika anda terus menghadapi isu, anda boleh mencuba penyelesaian alternatif menggunakan perpustakaan Apache HttpComponents. Berikut ialah contoh:

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();

Atas ialah kandungan terperinci Bagaimana untuk Melakukan Pengesahan Asas HTTP dengan HttpClient di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn