2012-09-21 22 views
14

Estoy tratando de enviar un HTTP GET con un objeto json en su cuerpo. ¿Hay alguna manera de configurar el cuerpo de un HttpClient HttpGet? Estoy buscando el equivalente de HttpPost # setEntity.Apache HttpClient GET con cuerpo

+0

casi duplicado: http://stackoverflow.com/questions/978061/http-get-with-request-body –

+0

Nikita - Mi pregunta es similar a la que publique, sin embargo estoy pidiendo específicamente cómo hacerlo a través de la API Apache HttpClient. Gracias de cualquier forma. –

+0

La respuesta es oficialmente que no es posible. Las solicitudes GET no pueden contener el cuerpo de acuerdo con las especificaciones. Necesita usar solicitudes POST. –

Respuesta

20

Por lo que sé, no puede hacer esto con la clase predeterminada HttpGet que viene con la biblioteca Apache. Sin embargo, puede crear una subclase de la entidad HttpEntityEnclosingRequestBase y establecer el método en GET. No he probado esto, pero creo que el siguiente ejemplo podría ser lo que estás buscando:

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

Editar:

A continuación, puede hacer lo siguiente:

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

Agradable. Gracias. –

+0

De nada. Háganos saber si funciona tal vez? :) – torbinsky

+0

¿Funciona este enfoque? – Jilberta

4

Uso La respuesta de torbinsky Creé la clase anterior. Esto me permite usar los mismos métodos para 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

Probé el código anterior con un servicio web con el que tengo que hablar en mi proyecto y sin ir. Acabo de recibir en el registro del daemon de servicio "Error interno de la aplicación, conexión de cierre". Jersey ofreció un HttpGet con entidades (llamadas de manera diferente), pero lamentablemente apache no lo hace. Este servicio web particular realmente espera una solicitud GET y no una POST. –

0

¿Cómo podemos enviar solicitud URI en este ejemplo como 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); 
} 
Cuestiones relacionadas