Apache HttpClient - Xác thực proxy

Trong chương này, chúng ta sẽ tìm hiểu cách tạo một HttpRequest được xác thực bằng tên người dùng và mật khẩu và chuyển nó qua proxy đến máy chủ đích, sử dụng một ví dụ.

Bước 1 - Tạo đối tượng CredentialsProvider

Giao diện CredentialsProvider duy trì một bộ sưu tập để giữ thông tin đăng nhập của người dùng. Bạn có thể tạo đối tượng của nó bằng cách khởi tạo lớp BasicCredentialsProvider, phần triển khai mặc định của giao diện này.

CredentialsProvider credentialsPovider = new BasicCredentialsProvider();

Bước 2 - Đặt thông tin đăng nhập

Bạn có thể đặt thông tin đăng nhập cần thiết cho đối tượng CredentialsProvider bằng cách sử dụng setCredentials()phương pháp. Phương thức này chấp nhận hai đối tượng -

  • AuthScope object - Phạm vi xác thực chỉ định các chi tiết như tên máy chủ, số cổng và tên lược đồ xác thực.

  • Credentials object- Chỉ định thông tin đăng nhập (tên người dùng, mật khẩu). Đặt thông tin xác thực bằng cách sử dụngsetCredentials() cho cả máy chủ và proxy như hình dưới đây.

credsProvider.setCredentials(new AuthScope("example.com", 80), new
   UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000), new
   UsernamePasswordCredentials("abc", "passwd"));

Bước 3 - Tạo một đối tượng HttpClientBuilder

Tạo một HttpClientBuilder sử dụng custom() phương pháp của HttpClients lớp như hình dưới đây -

//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();

Bước 4 - Đặt CredentialsProvider

Bạn có thể đặt đối tượng CredentialsProvider thành đối tượng HttpClientBuilder bằng cách sử dụng setDefaultCredentialsProvider()phương pháp. Vượt qua cái đã tạo trước đóCredentialsProvider phản đối phương pháp này.

clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);

Bước 5 - Xây dựng ClosableHttpClient

Xây dựng CloseableHttpClient đối tượng sử dụng build() phương pháp.

CloseableHttpClient httpclient = clientbuilder.build();

Bước 6 - Tạo proxy và máy chủ đích

Tạo máy chủ đích và máy chủ proxy bằng cách khởi tạo HttpHost lớp học.

//Creating the target and proxy hosts
HttpHost target = new HttpHost("example.com", 80, "http");
HttpHost proxy = new HttpHost("localhost", 8000, "http");

Bước 7 - Đặt proxy và xây dựng đối tượng RequestConfig

Tạo một RequestConfig.Builder đối tượng sử dụng custom()phương pháp. Đặt đối tượng proxyHost đã tạo trước đó thànhRequestConfig.Builder sử dụng setProxy()phương pháp. Cuối cùng, xây dựngRequestConfig đối tượng sử dụng build() phương pháp.

RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();

Bước 8 - Tạo một đối tượng yêu cầu HttpGet và đặt đối tượng cấu hình cho nó.

Tạo một HttpGetđối tượng bằng cách khởi tạo lớp HttpGet. Đặt đối tượng cấu hình đã tạo ở bước trước thành đối tượng này bằng cách sử dụngsetConfig() phương pháp.

//Create the HttpGet request object
HttpGet httpGet = new HttpGet("/");

//Setting the config to the request
httpget.setConfig(config);

Bước 9 - Thực hiện yêu cầu

Thực thi yêu cầu bằng cách chuyển đối tượng HttpHost (đích) và yêu cầu (HttpGet) làm tham số cho execute() phương pháp.

HttpResponse httpResponse = httpclient.execute(targetHost, httpget);

Thí dụ

Ví dụ sau minh họa cách thực hiện một yêu cầu HTTP thông qua một proxy bằng tên người dùng và mật khẩu.

import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;

public class ProxyAuthenticationExample {
   public static void main(String[] args) throws Exception {

      //Creating the CredentialsProvider object
      CredentialsProvider credsProvider = new BasicCredentialsProvider();

      //Setting the credentials
      credsProvider.setCredentials(new AuthScope("example.com", 80), 
         new UsernamePasswordCredentials("user", "mypass"));
      credsProvider.setCredentials(new AuthScope("localhost", 8000), 
         new UsernamePasswordCredentials("abc", "passwd"));

      //Creating the HttpClientBuilder
      HttpClientBuilder clientbuilder = HttpClients.custom();

      //Setting the credentials
      clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
      
      //Building the CloseableHttpClient object
      CloseableHttpClient httpclient = clientbuilder.build();


      //Create the target and proxy hosts
      HttpHost targetHost = new HttpHost("example.com", 80, "http");
      HttpHost proxyHost = new HttpHost("localhost", 8000, "http");

      //Setting the proxy
      RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
      reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
      RequestConfig config = reqconfigconbuilder.build();

      //Create the HttpGet request object
      HttpGet httpget = new HttpGet("/");

      //Setting the config to the request
      httpget.setConfig(config);
 
      //Printing the status line
      HttpResponse response = httpclient.execute(targetHost, httpget);
      System.out.println(response.getStatusLine());

   }
}

Đầu ra

Khi thực thi, chương trình trên tạo ra kết quả sau:

HTTP/1.1 200 OK