Comment faire pour ajouter des paramètres à HttpURLConnection l'aide de POST à l'aide de NameValuePair
Je suis en train de faire POST avec HttpURLConnection
(j'ai besoin de l'utiliser de cette façon, ne peut pas utiliser HttpPost
) et je voudrais ajouter des paramètres à cette connexion comme
post.setEntity(new UrlEncodedFormEntity(nvp));
où
nvp = new ArrayList<NameValuePair>();
avoir quelques données stockées dans. Je ne peux pas trouver un moyen comment ajouter cette 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 pour que maladroit https et http combinaison est la nécessité pour à ne pas vérifier le certificat. Ce n'est pas un problème, même si, il l'envoie au serveur bien. Mais j'en ai besoin pour post avec des arguments.
Des idées?
Double Avertissement:
De retour en 2012, je n'avais aucune idée de la façon dont les paramètres ont été insérés dans un HTTP POST demande. J'ai été suspendu pour NameValuePair
parce qu'il était dans un tutoriel. Cette question peut sembler comme un doublon, cependant, mon 2012 auto de lire que d'autres question et il a été PAS à l'aide de NameValuePair
. Il n'a pas, en effet, de résoudre mon problème.
- Si vous avez un problème avec l'affichage params puis lien ci-dessous peuvent vous aider. stackoverflow.com/questions/2793150/...
- String url = "example.com"; String charset = "UTF-8"; String param1 = "valeur1"; String param2 = "valeur2"; // ... String query = Chaîne de caractères.format("param1=%s¶m2=%s", URLEncoder.coder(param1, charset), URLEncoder.coder(param2, charset)); vous pouvez faire une requête de la chaîne au lieu d'utiliser NameValuePair Liste.
- "J'ai besoin de l'utiliser de cette façon, ne peut pas utiliser HttpPost" c'est pourquoi j'ai proposé cette autre réponse posté par Manikandan fonctionne très bien.
- J'ai une question/doute au sujet de complexes de type de paramètres. J'ai les paramètres, et je ne sais pas comment passer de ces paramètres.
{"key1":"value1", "key2":"value2", "key3":{"inner key1":"inner value1", "inner key2":"inner value 2"}}
. J'ai été fourni ce type de complexe de la valeur de la clé de paramètres et je veux savoir comment puis-je passer ces paramètres dans webservice? - Connexes: stackoverflow.com/questions/4205980/...
- Double Possible de Java - envoi HTTP paramètres via la méthode POST facilement
- pourquoi marquage de cette question comme un doublon, lorsque vous avez lié votre réponse (à partir de 2015) pour une réponse qui est ici? Exactement pour la raison que j'ai posté dans cette question en 2012 - l'utilisation de
NameValuePair
. - C'était parce que "beaucoup de réponses" ici, ce sont les mêmes que les réponses à cette question. Mais maintenant je vois que c'est une autre question, merci pour ces précisions 🙂
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir des flux de sortie pour la connexion et écrire le paramètre de chaîne de requête à elle.
...
URL url = new URL("http://yoururl.com?k1=v1&k2=v2&···&kn=vn");
puis quand set conn à l'utilisation de la méthode POST n'avez pas besoin de les écrire.connection.getResponseCode()
afin de voir cette demande dans le serveur.android.util.Pair
comme l'a suggéré here.Depuis le NameValuePair est obsolète. La pensée de partager mon code
....
""result""
?OutputStream os = conn.getOutputStream();
sur jelly bean concernant aucune adresse associée avec le nom d'hôte?Si vous n'avez pas besoin de la
ArrayList<NameValuePair>
pour les paramètres, c'est une solution plus courte qui construit la chaîne de requête à l'aide de laUri.Builder
classe:La seule solution est de faire votre propre params chaîne.
C'est la méthode que j'ai utilisé pour mon dernier projet. Vous avez besoin de modifier les arguments de table de hachage pour namevaluepair de l':
Affichage de la params:
Je crois que j'ai trouvé exactement ce dont vous avez besoin. Il peut aider les autres.
Vous pouvez utiliser la méthode UrlEncodedFormEntity.writeTo(OutputStream).
La accepté de répondre jette un ProtocolException à:
OutputStream os = conn.getOutputStream();
car elle ne permet pas à la sortie de l'URLConnection objet. La solution doit comprendre cela:
conn.setDoOutput(true);
pour le faire fonctionner.
Si elle n'est pas trop tard, j'aimerais partager mon code
Utils.java:
MainActivity.java:
Il y a une approche beaucoup plus facile à l'aide de PrintWriter (voir ici)
Fondamentalement tout ce que vous avez besoin est:
AsyncTask
pour envoyer des données, commeJSONObect
viaPOST
MéthodeEssayez ceci:
Vous pouvez ajouter autant de
nameValuePairs
que vous en avez besoin. Et n'oubliez pas de mentionner le nombre dans la liste.How to add parameters to HttpURLConnection using POST
- Il induit en erreur.En utilisant org.apache.http.client.HttpClient aussi, vous pouvez facilement le faire avec plus lisible comme ci-dessous.
Dans les try catch vous pouvez insérer
Appeler POST/PUT/DELETE/GET méthodes Restful avec en-tête personnalisé ou json données suivantes Async classe peut être utilisée
Et L'Usage est
Dans mon cas, j'ai créé la fonction comme cela pour faire une requête Post qui prend de la Chaîne d'url et de la table de hachage de paramètres
- Je utiliser quelque chose comme ceci:
c'est de cette façon que je passe "params"(JSONObject) POST