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