2012-09-21 7 views
14

Sto tentando di inviare un HTTP GET con un oggetto json nel suo corpo. C'è un modo per impostare il corpo di un HttpGet HttpClient? Sto cercando l'equivalente di HttpPost # setEntity.Apache HttpClient GET con corpo

+0

Quasi duplicare: http://stackoverflow.com/questions/978061/http-get-with-request-body –

+0

Nikita - La mia domanda è simile a quella di postare, comunque sto chiedendo specificamente come per farlo tramite l'API Apache HttpClient. Grazie comunque. –

+0

La risposta è oficalally che non è possibile. Le richieste GET non possono contenere il corpo in base alle specifiche. È necessario utilizzare le richieste POST. –

risposta

20

Da quello che so, non è possibile farlo con la classe HttpGet predefinita fornita con la libreria Apache. Tuttavia, è possibile sottoclasse l'entità HttpEntityEnclosingRequestBase e impostare il metodo su GET. Non ho ancora testato questo, ma penso che il seguente esempio potrebbe essere quello che stai cercando:

import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; 

public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase { 
    public final static String METHOD_NAME = "GET"; 

    @Override 
    public String getMethod() { 
     return METHOD_NAME; 
    } 
} 

Edit:

È quindi possibile effettuare le seguenti operazioni:

... 
HttpGetWithEntity e = new HttpGetWithEntity(); 
... 
e.setEntity(yourEntity); 
... 
response = httpclient.execute(e); 
+0

Bello. Grazie. –

+0

Prego. Facci sapere se funziona forse? :) – torbinsky

+0

Questo approccio funziona? – Jilberta

4

Utilizzando risposta di torbinsky Ho creato la classe di cui sopra. Questo mi permette di utilizzare gli stessi metodi per HttpPost.

import java.net.URI; 

import org.apache.http.client.methods.HttpPost; 

public class HttpGetWithEntity extends HttpPost { 

    public final static String METHOD_NAME = "GET"; 

    public HttpGetWithEntity(URI url) { 
     super(url); 
    } 

    public HttpGetWithEntity(String url) { 
     super(url); 
    } 

    @Override 
    public String getMethod() { 
     return METHOD_NAME; 
    } 
} 
+0

Ho provato il codice di cui sopra con un servizio web che ho bisogno di parlare con il mio progetto e non andare. Ho appena ricevuto il log del servizio daemon "Errore dell'applicazione interna, chiusura della connessione". Jersey ha offerto un HttpGet con entità (chiamate diversamente), ma purtroppo Apache no. Questo particolare servizio Web si aspetta davvero una richiesta GET e non un POST. –

0

Come possiamo inviare URI della richiesta in questo esempio, proprio come HttpGet & HttpPost ???

public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase 
{ 
    public final static String METHOD_NAME = "GET"; 
    @Override 
    public String getMethod() { 
     return METHOD_NAME; 
    } 

     HttpGetWithEntity e = new HttpGetWithEntity(); 
     e.setEntity(yourEntity); 
     response = httpclient.execute(e); 
}