2015-06-06 14 views
8

Không thể tìm thấy bất kỳ trợ giúp nào về vấn đề này nhưng tôi đã cố gắng gửi yêu cầu đăng bài với HtmlUnit. Mã tôi có là:Java - Gửi yêu cầu đăng bài với HtmlUnit

final WebClient webClient = new WebClient(); 

// Instead of requesting the page directly we create a WebRequestSettings object 
WebRequest requestSettings = new WebRequest(
    new URL("www.URLHERE.com"), HttpMethod.POST); 

// Then we set the request parameters 
requestSettings.setRequestParameters(new ArrayList()); 
requestSettings.getRequestParameters().add(new NameValuePair("name", "value")); 
// Finally, we can get the page 
HtmlPage page = webClient.getPage(requestSettings); 

Có cách nào dễ dàng hơn để tôi có thể thực hiện yêu cầu POST không?

+0

Không sử dụng Ứng dụng khách Web. –

+2

Xin chào. Bạn muốn một cách dễ dàng hơn. Ok, nhưng bạn có thể giải thích những gì bạn thấy khó hoặc phức tạp trong đoạn mã của mình không? Xin lỗi, tôi không thấy. – davidxxx

Trả lời

12

Đây là cách nó được thực hiện

public void post() throws Exception 
{ 

    URL url = new URL("YOURURL"); 
    WebRequest requestSettings = new WebRequest(url, HttpMethod.POST); 

    requestSettings.setAdditionalHeader("Accept", "*/*"); 
    requestSettings.setAdditionalHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
    requestSettings.setAdditionalHeader("Referer", "REFURLHERE"); 
    requestSettings.setAdditionalHeader("Accept-Language", "en-US,en;q=0.8"); 
    requestSettings.setAdditionalHeader("Accept-Encoding", "gzip,deflate,sdch"); 
    requestSettings.setAdditionalHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3"); 
    requestSettings.setAdditionalHeader("X-Requested-With", "XMLHttpRequest"); 
    requestSettings.setAdditionalHeader("Cache-Control", "no-cache"); 
    requestSettings.setAdditionalHeader("Pragma", "no-cache"); 
    requestSettings.setAdditionalHeader("Origin", "https://YOURHOST"); 

    requestSettings.setRequestBody("REQUESTBODY"); 

    Page redirectPage = webClient.getPage(requestSettings); 
} 

Bạn có thể tùy chỉnh nó tuy nhiên bạn muốn. Thêm/xóa tiêu đề, thêm/xóa nội dung yêu cầu, v.v.

-1

Có nhiều số thư viện có thể sử dụng mà bạn có thể gọi cho các dịch vụ web còn lại.

1) Apache Http client 2) Retrofit từ Quảng trường 3) Volley từ google

Tôi đã sử dụng Http Apache khách hàng và trang bị thêm cả. Cả hai đều tuyệt vời.

Đây là mã ví dụ về Apache HTTP client để gửi bài yêu cầu

String token = null; 

    HttpClient httpClient = HttpClientBuilder.create().build(); 
    HttpPost postRequest = new HttpPost(LOGIN_URL); 
    StringBuilder sb = new StringBuilder(); 
    sb.append("{\"userName\":\"").append(user).append("\",").append("\"password\":\"").append(password).append("\"}"); 
    String content = sb.toString(); 
    StringEntity input = new StringEntity(content); 
    input.setContentType("application/json"); 
    postRequest.setHeader("Content-Type", "application/json"); 
    postRequest.setHeader("Accept", "application/json"); 

    postRequest.setEntity(input); 

    HttpResponse response = httpClient.execute(postRequest); 

    if (response.getStatusLine().getStatusCode() != 201) 
    { 
     throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode()); 
    } 

    Header[] headers = response.getHeaders("X-Auth-Token"); 

    if (headers != null && headers.length > 0) 
    { 
     token = headers[0].getValue(); 
    } 

    return token; 
+0

Cảm ơn bạn đã trả lời. Tôi đã sử dụng Apache httpclient nhưng với trang web mà tôi phải truy cập yêu cầu bạn phải đợi 5 giây để bảo vệ ddos ​​vì vậy khi tôi sử dụng httpclient tôi chỉ nhận được mã nguồn từ bảo vệ ddos. Điều quan trọng là tôi có thể lấy mã nguồn của trang thực tế khi tôi cần phân tích cú pháp phản hồi sau khi bài đăng được gửi –

+0

aviundefined, Tôi không thấy theo cách nào, sử dụng ứng dụng khách apache http và api khác mà bạn đề xuất dễ dàng hơn htmlunit. Bạn có thể tranh cãi được không? – davidxxx

Các vấn đề liên quan