>  기사  >  Java  >  Java에서 HttpClient를 사용하여 HTTP 기본 인증을 수행하는 방법은 무엇입니까?

Java에서 HttpClient를 사용하여 HTTP 기본 인증을 수행하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-17 19:45:02418검색

How to Perform HTTP Basic Authentication with HttpClient in Java?

Java에서 HttpClient를 사용한 HTTP 기본 인증

이 기사에서는 Java에서 HttpClient 라이브러리를 사용하여 HTTP 기본 인증을 수행하는 방법을 살펴보겠습니다. . HTTP 기본 인증은 클라이언트가 자격 증명(사용자 이름 및 비밀번호)을 제공하여 보호된 리소스에 액세스할 수 있도록 하는 간단하고 널리 사용되는 인증 메커니즘입니다.

HttpClient 3.0

HttpClient 3.0을 사용하는 동안 500 내부 서버 오류가 발생한다고 언급하셨습니다. 작동해야 하는 코드의 수정된 버전은 다음과 같습니다.

    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

HttpClient 4.0.1의 경우 다음 코드를 시도해 볼 수 있습니다.

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

대안 해결 방법

문제가 계속 발생하면 Apache HttpComponents 라이브러리를 사용하여 대체 솔루션을 시도해 볼 수 있습니다. 예는 다음과 같습니다.

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

위 내용은 Java에서 HttpClient를 사용하여 HTTP 기본 인증을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.