2015-06-06 15 views
8

Naprawdę nie mogę znaleźć żadnej pomocy, ale próbuję wysłać prośbę o dodanie do HtmlUnit. Posiadany przeze mnie kod to:Java - Wysyłanie żądania postu za pomocą 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); 

Czy istnieje łatwiejszy sposób realizacji zlecenia POST?

+0

Nie używając klienta sieci. –

+2

Witaj. Chcesz łatwiejszy sposób. Ok, ale czy możesz wyjaśnić, co znalazłeś w opisie? Niestety, nie widzę. – davidxxx

Odpowiedz

12

Jak to się robi

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

Można go jednak chcesz. Dodaj/usuń nagłówki, dodaj/usuń treść żądania, itd ...

-1

Istnieje liczba możliwych bibliotek, za pomocą których można wywoływać internetowe usługi odpoczynku.

1) Apache klient 2), dodatkowy od placu 3) siatkówki Google

I stosuje klienta HTTP apache'a i modyfikacyjne obu. Oba są niesamowite.

Oto przykład kodu klienta HTTP Apache wysłać żądanie 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

Dzięki za odpowiedź. Użyłem Apache httpclient, ale ze stroną, do której mam dostęp, trzeba odczekać 5 sekund na ochronę ddos, więc kiedy używam httpclient, otrzymuję kod źródłowy z ochrony ddos. Ważne jest, że mogę uzyskać kod źródłowy rzeczywistej strony, ponieważ potrzebuję przeanalizować odpowiedź po wysłaniu posta. –

+0

aviundefined, Nie widzę, w jaki sposób, używając klienta HTTP apache i innych api, które proponujesz, są łatwiejsze htmlunit. Czy możesz się spierać? – davidxxx