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