J'essaie de faire du POST avec HttpURLConnection
(j'ai besoin de l'utiliser de cette façon, HttpPost
je ne peux pas l'utiliser ) et je voudrais ajouter des paramètres à cette connexion tels que
post.setEntity(new UrlEncodedFormEntity(nvp));
où
nvp = new ArrayList<NameValuePair>();
avoir des données stockées. Je ne peux pas trouver un moyen d'ajouter ceci ArrayList
à mon HttpURLConnection
qui est ici:
HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
https.setHostnameVerifier(DO_NOT_VERIFY);
http = https;
http.setRequestMethod("POST");
http.setDoInput(true);
http.setDoOutput(true);
La raison de cette combinaison https et http maladroite est la nécessité de ne pas vérifier le certificat. Ce n'est pas un problème, cependant, il affiche bien le serveur. Mais j'en ai besoin pour poster des arguments.
Des idées?
Clause de non-responsabilité en double:
En 2012, je ne savais pas comment les paramètres étaient insérés dans une requête HTTP POST . Je m'accrochais NameValuePair
parce que c'était dans un tutoriel. Cette question peut sembler être un doublon, cependant, mon auto 2012 a lu cette autre question et elle n'utilisait PASNameValuePair
. En fait, cela n'a pas résolu mon problème.
Réponses:
Vous pouvez obtenir le flux de sortie pour la connexion et y écrire la chaîne de requête de paramètres.
...
la source
URL url = new URL("http://yoururl.com?k1=v1&k2=v2&···&kn=vn");
alors lorsque vous définissez conn pour utiliser la méthode POST, vous n'avez pas besoin de les écrire.Étant donné que NameValuePair est obsolète. Pensé à partager mon code
....
la source
""result""
?OutputStream os = conn.getOutputStream();
sur Jelly Bean concernant aucune adresse associée au nom d'hôte?Si vous n'avez pas besoin des
ArrayList<NameValuePair>
paramètres for, il s'agit d'une solution plus courte qui crée la chaîne de requête à l'aide de laUri.Builder
classe:la source
Une solution consiste à créer votre propre chaîne de paramètres.
C'est la méthode que j'ai utilisée pour mon dernier projet. Vous devez changer les arguments de la table de hachage en namevaluepair:
PUBLICATION des paramètres:
la source
Je pense avoir trouvé exactement ce dont vous avez besoin. Cela peut aider les autres.
Vous pouvez utiliser la méthode UrlEncodedFormEntity.writeTo (OutputStream) .
la source
La réponse acceptée lève une exception ProtocolException à:
OutputStream os = conn.getOutputStream();
car il n'active pas la sortie de l'objet URLConnection. La solution doit inclure ceci:
conn.setDoOutput(true);
pour le faire fonctionner.
la source
Si ce n'est pas trop tard, j'aimerais partager mon code
Utils.java:
MainActivity.java:
la source
Il existe une approche beaucoup plus simple à l'aide de PrintWriter (voir ici )
Fondamentalement, tout ce dont vous avez besoin est:
la source
AsyncTask
envoyer des données commeJSONObect
via laPOST
méthodela source
Essaye ça:
Vous pouvez en ajouter autant
nameValuePairs
que vous le souhaitez. Et n'oubliez pas de mentionner le nombre dans la liste.la source
How to add parameters to HttpURLConnection using POST
- Cela induit en erreur.Pour appeler les méthodes POST / PUT / DELETE / GET Restful avec un en-tête personnalisé ou des données json, la classe Async suivante peut être utilisée
Et l'utilisation est
la source
En utilisant org.apache.http.client.HttpClient, vous pouvez également le faire facilement de manière plus lisible comme ci-dessous.
Dans try catch, vous pouvez insérer
la source
Dans mon cas, j'ai créé une fonction comme celle-ci pour faire une demande de post qui prend l'url de chaîne et la table de hachage des paramètres
la source
J'utilise quelque chose comme ça:
la source
voici comment je passe "params" (JSONObject) via POST
la source