2015-06-06 9 views
8

Kann wirklich keine Hilfe zu diesem Thema finden, aber ich habe versucht, eine Post-Anfrage mit HtmlUnit zu senden. Der Code, den ich habe, ist:Java - Senden einer Post-Anfrage mit 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); 

Gibt es einen einfacheren Weg, ich könnte eine POST-Anfrage ausführen?

+0

Nicht den Web Client verwenden. –

+2

Hallo. Du willst einen leichteren Weg. Ok, aber kannst du erklären, was du in deinem Snippet schwer oder komplex gefunden hast? Sorry, ich sehe nicht. – davidxxx

Antwort

12

Dies ist, wie es

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

getan Sie können es, wie Sie wollen. Hinzufügen/Entfernen von Headern, Hinzufügen/Entfernen von Anfragetext usw.

-1

Es gibt n Nummern von möglichen Bibliotheken, mit denen Sie Rest Web Services aufrufen können.

1) Apache HTTP-Client 2) Retrofit von Square 3) Volley von Google

I Http Apache Client verwendet haben und beide nachzurüsten. Beide sind großartig.

Hier Codebeispiel von Apache HTTP-Client Gesuch senden

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

Danke für die Antwort. Ich habe Apache httpclient verwendet, aber mit der Site, auf die ich zugreifen muss, müssen Sie 5 Sekunden auf den Ddos-Schutz warten. Wenn ich also httpclient verwende, erhalte ich einfach den Quellcode vom ddos-Schutz. Es ist wichtig, dass ich den Quellcode der tatsächlichen Seite bekomme, wie ich die Antwort analysieren muss, nachdem der Beitrag gesendet wurde –

+0

aviundefined, Ich sehe nicht, auf welche Weise, mit Apache http Client und andere API vorschlagen Sie einfacher sind als htmleinheit. Kannst du bitte argumentieren? – davidxxx