Apache HttpClient - Xác thực người dùng
Sử dụng HttpClient, bạn có thể kết nối với một trang web cần tên người dùng và mật khẩu. Chương này giải thích cách thực hiện yêu cầu của khách hàng đối với một trang web yêu cầu tên người dùng và mật khẩu.
Bước 1 - Tạo đối tượng CredentialsProvider
Các CredentialsProviderGiao diện 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ạoBasicCredentialsProvider lớp, việc 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 như dưới đây:
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ụng setCredentials() phương pháp 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 học.
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
Bước 4 - Đặt thông tin đăng nhậpPovider
Bạn có thể đặt đối tượng credentialsPovider đã tạo ở trên thành HttpClientBuilder bằng cách sử dụng setDefaultCredentialsProvider() phương pháp.
Đặt đối tượng CredentialProvider được tạo ở bước trước cho trình tạo máy khách bằng cách chuyển nó đến CredentialsProvider object() như hình dưới đâ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 của HttpClientBuilder lớp học.
CloseableHttpClient httpclient = clientbuilder.build()
Bước 6 - Tạo một đối tượng HttpGet và thực thi nó
Tạo một đối tượng HttpRequest bằng cách khởi tạo lớp HttpGet. Thực hiện yêu cầu này bằng cách sử dụngexecute() phương pháp.
//Creating a HttpGet object
HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/ ");
//Executing the Get request
HttpResponse httpresponse = httpclient.execute(httpget);
Thí dụ
Sau đây là một chương trình ví dụ minh họa việc thực thi một yêu cầu HTTP đối với một trang web đích yêu cầu xác thực người dùng.
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
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 UserAuthenticationExample {
public static void main(String args[]) throws Exception{
//Create an object of credentialsProvider
CredentialsProvider credentialsPovider = new BasicCredentialsProvider();
//Set the credentials
AuthScope scope = new AuthScope("https://www.tutorialspoint.com/questions/", 80);
Credentials credentials = new UsernamePasswordCredentials("USERNAME", "PASSWORD");
credentialsPovider.setCredentials(scope,credentials);
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
//Setting the credentials
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credentialsPovider);
//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder.build();
//Creating a HttpGet object
HttpGet httpget = new HttpGet("https://www.tutorialspoint.com/questions/index.php");
//Printing the method used
System.out.println(httpget.getMethod());
//Executing the Get request
HttpResponse httpresponse = httpclient.execute(httpget);
//Printing the status line
System.out.println(httpresponse.getStatusLine());
int statusCode = httpresponse.getStatusLine().getStatusCode();
System.out.println(statusCode);
Header[] headers= httpresponse.getAllHeaders();
for (int i = 0; i<headers.length;i++) {
System.out.println(headers[i].getName());
}
}
}
Đầu ra
Khi thực thi, chương trình trên tạo ra kết quả sau.
GET
HTTP/1.1 200 OK
200