Estoy tratando de hacer POST con HttpURLConnection
(necesito usarlo de esta manera, no puedo usar HttpPost
) y me gustaría agregar parámetros a esa conexión, como
post.setEntity(new UrlEncodedFormEntity(nvp));
dónde
nvp = new ArrayList<NameValuePair>();
teniendo algunos datos almacenados. No puedo encontrar una manera de agregar esto ArrayList
a mi HttpURLConnection
que está aquí:
HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
https.setHostnameVerifier(DO_NOT_VERIFY);
http = https;
http.setRequestMethod("POST");
http.setDoInput(true);
http.setDoOutput(true);
La razón de esa incómoda combinación de https y http es la necesidad de no verificar el certificado. Sin embargo, eso no es un problema, publica bien el servidor. Pero lo necesito para publicar con argumentos.
¿Algunas ideas?
Descargo de responsabilidad duplicado:
En 2012, no tenía idea de cómo se insertaban los parámetros en una solicitud HTTP POST . Estaba pendiente NameValuePair
porque estaba en un tutorial. Esta pregunta podría parecer como un duplicado, sin embargo, mi auto 2012 leyó que otra pregunta y se NO utilizando NameValuePair
. De hecho, no resolvió mi problema.
Respuestas:
Puede obtener una secuencia de salida para la conexión y escribirle la cadena de consulta de parámetros.
...
fuente
URL url = new URL("http://yoururl.com?k1=v1&k2=v2&···&kn=vn");
luego, cuando se establece conn para usar el método POST, no es necesario escribirlos.Dado que NameValuePair está en desuso. Pensé en compartir mi código
....
fuente
""result""
?OutputStream os = conn.getOutputStream();
en jelly bean con respecto a ninguna dirección asociada con el nombre de host?Si no necesita los
ArrayList<NameValuePair>
parámetros for, esta es una solución más corta que crea la cadena de consulta utilizando laUri.Builder
clase:fuente
Una solución es hacer su propia cadena de parámetros.
Este es el método real que he estado usando para mi último proyecto. Debe cambiar args de hashtable a namevaluepair's:
PUBLICANDO los params:
fuente
Creo que encontré exactamente lo que necesitas. Puede ayudar a otros.
Puede usar el método UrlEncodedFormEntity.writeTo (OutputStream) .
fuente
La respuesta aceptada arroja una excepción ProtocolException a:
OutputStream os = conn.getOutputStream();
porque no habilita la salida para el objeto URLConnection. La solución debe incluir esto:
conn.setDoOutput(true);
para que funcione
fuente
Si no es demasiado tarde, me gustaría compartir mi código
Utils.java:
MainActivity.java:
fuente
Hay un enfoque mucho más fácil con PrintWriter (ver aquí )
Básicamente todo lo que necesitas es:
fuente
AsyncTask
para enviar datos como aJSONObect
través delPOST
Métodofuente
Prueba esto:
Puede agregar tantos
nameValuePairs
como necesite. Y no olvide mencionar el recuento en la lista.fuente
How to add parameters to HttpURLConnection using POST
: engaña.Para llamar a métodos POST / PUT / DELETE / GET Restful con encabezado personalizado o datos json, se puede usar la siguiente clase Async
Y el uso es
fuente
Al usar org.apache.http.client.HttpClient también puede hacerlo fácilmente con una forma más legible como se muestra a continuación.
En el intento de captura puedes insertar
fuente
En mi caso, he creado una función como esta para hacer una solicitud de publicación que toma String url y hashmap de parámetros
fuente
Yo uso algo como esto:
fuente
así es como paso "params" (JSONObject) a través de POST
fuente