Java-使用HtmlUnit发送post请求
在这方面找不到任何帮助,但我一直在尝试使用HtmlUnit发送post请求。我的密码是:Java-使用HtmlUnit发送post请求,java,htmlunit,Java,Htmlunit,在这方面找不到任何帮助,但我一直在尝试使用HtmlUnit发送post请求。我的密码是: 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"), Htt
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);
有没有更简单的方法来执行POST请求?有n个可能的库,您可以使用这些库调用rest web服务 1) Apache Http客户端 2) 广场改造 3) 谷歌截击 我使用了Http Apache客户端,并对两者进行了改进。两者都很棒 下面是Apache HTTP客户端发送Post请求的代码示例
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;
就是这样做的
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);
}
您可以根据需要自定义它。添加/删除标题、添加/删除请求正文等…不使用Web Client.Hello。你想要一个更简单的方法。好的,但是你能解释一下你在片段中发现了什么困难或复杂的地方吗?对不起,我不明白。谢谢你的回复。我使用了Apache httpclient,但我必须访问的站点需要您等待5秒进行ddos保护,因此当我使用httpclient时,我只需从ddos保护中获取源代码。重要的是,我可以获得实际页面的源代码,因为我需要在帖子发布后解析响应。未定义,我不知道用哪种方式,使用ApacheHTTP客户端和您建议的其他api比使用htmlunit更容易。你能和我辩论一下吗?