Apache HttpClient - Đăng nhập dựa trên biểu mẫu
Sử dụng thư viện HttpClient, bạn có thể gửi yêu cầu hoặc đăng nhập vào biểu mẫu bằng cách chuyển các tham số.
Làm theo các bước dưới đây để đăng nhập vào một biểu mẫu.
Bước 1 - Tạo một đối tượng HttpClient
Các createDefault() phương pháp của HttpClients lớp trả về một đối tượng của lớp CloseableHttpClient, là triển khai cơ bản của giao diện HttpClient. Sử dụng phương pháp này, tạo một đối tượng HttpClient -
CloseableHttpClient httpClient = HttpClients.createDefault();
Bước 2 - Tạo một đối tượng RequestBuilder
Lớp RequestBuilderđược sử dụng để xây dựng yêu cầu bằng cách thêm các tham số vào nó. Nếu loại yêu cầu là PUT hoặc POST, nó sẽ thêm các tham số vào yêu cầu dưới dạng thực thể được mã hóa URL
Tạo một đối tượng RequestBuilder (kiểu POST) bằng phương thức post ().
//Building the post request object
RequestBuilder reqbuilder = RequestBuilder.post();
Bước 3 - Đặt Uri và các tham số cho RequestBuilder.
Đặt URI và các tham số cho đối tượng RequestBuilder bằng cách sử dụng setUri() và addParameter() các phương thức của lớp RequestBuilder.
//Set URI and parameters
RequestBuilder reqbuilder = reqbuilder.setUri("http://httpbin.org/post");
reqbuilder = reqbuilder1.addParameter("Name", "username").addParameter("password", "password");
Bước 4 - Xây dựng đối tượng HttpUriRequest
Sau khi thiết lập các thông số cần thiết, hãy xây dựng HttpUriRequest đối tượng sử dụng build() phương pháp.
//Building the HttpUriRequest object
HttpUriRequest httppost = reqbuilder2.build();
Bước 5 - Thực hiện yêu cầu
Phương thức thực thi của đối tượng ClosableHttpClient chấp nhận một đối tượng HttpUriRequest (giao diện) (tức là HttpGet, HttpPost, HttpPut, HttpHead, v.v.) và trả về một đối tượng phản hồi.
Thực thi HttpUriRequest đã tạo ở các bước trước bằng cách chuyển nó đến execute() phương pháp.
//Execute the request
HttpResponse httpresponse = httpclient.execute(httppost);
Thí dụ
Ví dụ sau minh họa cách đăng nhập vào biểu mẫu bằng cách gửi thông tin đăng nhập. Ở đây, chúng tôi đã gửi hai tham số -username and password vào một biểu mẫu và cố gắng in thực thể thông báo và trạng thái của yêu cầu.
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URISyntaxException;
public class FormLoginExample {
public static void main(String args[]) throws Exception {
//Creating CloseableHttpClient object
CloseableHttpClient httpclient = HttpClients.createDefault();
//Creating the RequestBuilder object
RequestBuilder reqbuilder = RequestBuilder.post();
//Setting URI and parameters
RequestBuilder reqbuilder1 = reqbuilder.setUri("http://httpbin.org/post");
RequestBuilder reqbuilder2 = reqbuilder1.addParameter("Name",
"username").addParameter("password", "password");
//Building the HttpUriRequest object
HttpUriRequest httppost = reqbuilder2.build();
//Executing the request
HttpResponse httpresponse = httpclient.execute(httppost);
//Printing the status and the contents of the response
System.out.println(EntityUtils.toString(httpresponse.getEntity()));
System.out.println(httpresponse.getStatusLine());
}
}
Đầu ra
Khi thực thi, chương trình trên tạo ra kết quả sau:
{
"args": {},
"data": "",
"files": {},
"form": {
"Name": "username",
"password": "password"
},
"headers": {
"Accept-Encoding": "gzip,deflate",
"Connection": "close",
"Content-Length": "31",
"Content-Type": "application/x-www-form-urlencoded; charset = UTF-8",
"Host": "httpbin.org",
"User-Agent": "Apache-HttpClient/4.5.6 (Java/1.8.0_91)"
},
"json": null,
"origin": "117.216.245.180",
"url": "http://httpbin.org/post"
}
HTTP/1.1 200 OK
Đăng nhập biểu mẫu bằng Cookie
Nếu biểu mẫu của bạn lưu trữ cookie, thay vì tạo mặc định CloseableHttpClient vật.
Create a CookieStore object bằng cách khởi tạo lớp BasicCookieStore.
//Creating a BasicCookieStore object
BasicCookieStore cookieStore = new BasicCookieStore();
Create a HttpClientBuilder sử dụng custom() phương pháp của HttpClients lớp học.
//Creating an HttpClientBuilder object
HttpClientBuilder clientbuilder = HttpClients.custom();
Set the cookie store to the client builder bằng phương thức setDefaultCookieStore ().
//Setting default cookie store to the client builder object
Clientbuilder = clientbuilder.setDefaultCookieStore(cookieStore);
Xây dựng CloseableHttpClient đối tượng sử dụng build() phương pháp.
//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder1.build();
Xây dựng HttpUriRequest đối tượng như được chỉ định ở trên bằng cách truyền thực thi yêu cầu.
Nếu trang lưu trữ cookie, các thông số bạn đã vượt qua sẽ được thêm vào kho lưu trữ cookie.
Bạn có thể in nội dung của CookieStore đối tượng nơi bạn có thể xem các thông số của mình (cùng với những thông số trước đó mà trang được lưu trữ trong trường hợp).
Để in cookie, hãy lấy tất cả cookie từ CookieStore đối tượng sử dụng getCookies()phương pháp. Phương thức này trả về mộtListvật. Sử dụng Iterator, in nội dung các đối tượng danh sách như hình dưới đây:
//Printing the cookies
List list = cookieStore.getCookies();
System.out.println("list of cookies");
Iterator it = list.iterator();
if(it.hasNext()) {
System.out.println(it.next());
}