2015-06-06 102 views
8

在這方面找不到任何幫助,但我一直在嘗試使用HtmlUnit發送郵件請求。我的代碼是:Java - 用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); 

有沒有更簡單的方法可以執行POST請求?

+0

不使用Web客戶端。 –

+2

你好。你想要一個更簡單的方法。好的,但你能解釋一下你在代碼片段中發現了些什麼嗎? 對不起,我沒有看到。 – davidxxx

回答

12

這是它是如何做

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

你可以定製你想要的東西。添加/刪除標題,添加/刪除請求正文等...

-1

有n個可能的庫,您可以使用它們調用其餘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; 
+0

感謝您的回覆。我已經使用了Apache httpclient,但是我必須訪問的站點需要等待5秒才能使用ddos保護,因此當使用httpclient時,我只需從ddos保護中獲取源代碼。重要的是我可以得到實際頁面的源代碼,因爲我需要在發佈帖子後解析響應 –

+0

aviundefined, 我不明白在哪種方式下,使用apache http客戶端和其他您建議的api更容易的HtmlUnit。你可以爭論嗎? – davidxxx