Pregunta ¿Cómo agrego los parámetros de consulta a GetMethod (usando Java commons-httpclient)?


Usando los recursos comunes de http: httpclient de Java para Java, ¿cuál es la mejor manera de agregar parámetros de consulta a una instancia de GetMethod? Si uso PostMethod, es muy sencillo:

PostMethod method = new PostMethod();
method.addParameter("key", "value");

Sin embargo, GetMethod no tiene el método "addParameter". Descubrí que esto funciona:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
    new NameValuePair("key", "value")
});

Sin embargo, la mayoría de los ejemplos que he visto codifican los parámetros directamente en la URL, por ejemplo:

GetMethod method = new GetMethod("http://www.example.com/page?key=value");

o codificar la cadena de consulta, p. ej .:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");

¿Es uno de estos patrones preferidos? ¿Y por qué la discrepancia API entre PostMethod y GetMethod? ¿Y para qué sirven todos esos otros métodos de HttpMethodParams?


32
2017-10-19 22:31


origen


Respuestas:


Los métodos de publicación tienen parámetros de publicación, pero obtener métodos no.

Los parámetros de consulta están incrustados en la URL. La versión actual de HttpClient acepta una cadena en el constructor. Si desea agregar la clave, par de valores arriba, puede usar:

String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);

Un buen tutorial de inicio se puede encontrar en Página de Apache Jakarta Commons.

Actualizar: Como se sugiere en el comentario, NameValuePair funciona.

GetMethod method = new GetMethod("example.com/page"); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 

22
2017-10-19 22:49



No es solo una cuestión de preferencia personal. El problema pertinente aquí es la codificación URL de los valores de los parámetros, para que los valores no se corrompan o malinterpreten como delimitadores adicionales, etc.

Como siempre, es mejor leer la documentación de la API en detalle: Documentación de HttpClient API

Al leer esto, puedes ver que setQueryString(String) NO codificará URL ni delimitará sus parámetros y valores, mientras que setQueryString(NameValuePair[]) automáticamente codificará URL y delimitará sus nombres y valores de parámetros. Este es el mejor método cuando utiliza datos dinámicos, ya que puede contener símbolos, signos iguales, etc.


17
2017-08-09 19:08



Pruébalo de esta manera:

    URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token")
            .addParameter("client_id", application.getKey())
            .addParameter("client_secret", application.getSecret())
            .addParameter("redirect_uri", callbackURL)
            .addParameter("code", code);

    HttpPost method = new HttpPost(builder.build());

8
2017-10-23 15:10