ejemplo - httpclient java
¿Cómo agrego los parámetros de consulta a GetMethod(usando Java commons-httpclient)? (3)
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, por ejemplo:
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?
Los métodos de publicación tienen parámetros de publicación, pero los métodos de obtención 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 inicial se puede encontrar en la página de Apache Jakarta Commons .
Actualización : como se sugiere en el comentario, NameValuePair funciona.
GetMethod method = new GetMethod("example.com/page");
method.setQueryString(new NameValuePair[] {
new NameValuePair("key", "value")
});
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: HttpClient API Documentation
Al leer esto, puede ver que setQueryString(String)
NO codificará URL ni delimitará sus parámetros y valores, mientras que setQueryString(NameValuePair[])
automáticamente codificará URL y delimitará los nombres y valores de sus parámetros. Este es el mejor método cuando utiliza datos dinámicos, ya que puede contener símbolos, signos iguales, etc.
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());