2015-06-06 14 views
8

Non riesco a trovare alcun aiuto su questo, ma ho cercato di inviare una richiesta di post con HtmlUnit. Il codice che ho è:Java - Invio di una richiesta di post con 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); 

C'è un modo più semplice ho potuto effettuare una richiesta POST?

+0

Non si utilizza il client Web. –

+2

Ciao. Vuoi un modo più semplice. Ok, ma puoi spiegare cosa hai trovato difficile o complesso nel tuo frammento? Scusa, non vedo. – davidxxx

risposta

12

Questo è come è fatto

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

È possibile personalizzare come vuoi. Aggiungi/rimuovi intestazioni, aggiungi/rimuovi corpo richiesta, ecc ...

-1

Esistono n numeri di librerie possibili che consentono di chiamare i servizi Web di riposo.

1) client HTTP Apache 2) Retrofit da Piazza 3) Volley da google

ho usato client HTTP Apache e Retrofit entrambi. Entrambi sono fantastici.

Ecco codice di esempio di client HTTP Apache di inviare richiesta Inserisci

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

Grazie per la risposta. Ho usato Apache httpclient ma con il sito a cui devo accedere è necessario attendere 5 secondi per la protezione da ddos, quindi quando uso httpclient, ottengo solo il codice sorgente dalla protezione ddos. È importante che riesca ad ottenere il codice sorgente della pagina effettiva in quanto ho bisogno di analizzare la risposta dopo che il post è stato inviato –

+0

aviundefined, Non vedo in che modo, utilizzando il client http Apache e altre API che proponi sono più facili come HtmlUnit. Puoi discutere per favore? – davidxxx

Problemi correlati