简体   繁体   English

Java - 使用HtmlUnit发送发布请求

[英]Java - Sending a post request with HtmlUnit

Can't really find any help on this but I've been trying to send a post request with HtmlUnit. 无法真正找到任何帮助,但我一直在尝试用HtmlUnit发送一个帖子请求。 The code I have is: 我的代码是:

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

Is there an easier way I could carry out a POST request? 有没有更简单的方法可以执行POST请求?

This is how it's done 这就是它的完成方式

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

You can customize it however you want. 您可以根据需要自定义它。 Add/remove headers, add/remove request body, etc ... 添加/删除标题,添加/删除请求正文等...

There are n numbers of possible libraries using which you can call rest web services. 有许多可能的库,您可以使用它们调用其余的Web服务。

1) Apache Http client 2) Retrofit from Square 3) Volley from google 1)Apache Http客户端2)来自Square的改进3)来自谷歌的Volley

I have used Http Apache client and Retrofit both. 我使用过Http Apache客户端和Retrofit。 Both are awesome. 两者都很棒。

Here is code example of Apache HTTP client to send Post request 以下是发送Post请求的Apache HTTP客户端的代码示例

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM