Ich versuche, POST mit zu machen HttpURLConnection
(ich muss es auf diese Weise verwenden, kann es nicht verwenden HttpPost
) und möchte dieser Verbindung Parameter hinzufügen, wie z
post.setEntity(new UrlEncodedFormEntity(nvp));
wo
nvp = new ArrayList<NameValuePair>();
Ich kann keinen Weg finden, wie ich dies ArrayList
zu meinem HttpURLConnection
hier hinzugefügten hinzufügen kann :
HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
https.setHostnameVerifier(DO_NOT_VERIFY);
http = https;
http.setRequestMethod("POST");
http.setDoInput(true);
http.setDoOutput(true);
Der Grund für diese umständliche Kombination aus https und http ist die Notwendigkeit, das Zertifikat nicht zu überprüfen . Das ist jedoch kein Problem, es postet den Server gut. Aber ich brauche es, um mit Argumenten zu posten.
Irgendwelche Ideen?
Doppelter Haftungsausschluss:
Im Jahr 2012 hatte ich keine Ahnung, wie Parameter in eine HTTP-POST- Anfrage eingefügt wurden . Ich habe daran festgehalten, NameValuePair
weil es in einem Tutorial war. Diese Frage mag wie ein Duplikat erscheinen, aber mein 2012er hat diese andere Frage selbst gelesen und sie wurde NICHT verwendet NameValuePair
. Es hat mein Problem tatsächlich nicht gelöst.
Antworten:
Sie können den Ausgabestream für die Verbindung abrufen und die Parameterabfragezeichenfolge in diese schreiben.
...
quelle
URL url = new URL("http://yoururl.com?k1=v1&k2=v2&···&kn=vn");
erstellen. Wenn Sie conn für die Verwendung der POST-Methode festlegen, müssen Sie diese nicht schreiben.Da das NameValuePair veraltet ist. Ich dachte daran, meinen Code zu teilen
....
quelle
""result""
?OutputStream os = conn.getOutputStream();
auf Jelly Bean, da keine Adresse mit dem Hostnamen verknüpft war?Wenn Sie die
ArrayList<NameValuePair>
for-Parameter nicht benötigen , ist dies eine kürzere Lösung, mit der die Abfragezeichenfolge mithilfe derUri.Builder
Klasse erstellt wird:quelle
Eine Lösung besteht darin, eine eigene Parameterzeichenfolge zu erstellen.
Dies ist die eigentliche Methode, die ich für mein letztes Projekt verwendet habe. Sie müssen die Argumente von hashtable in namevaluepair ändern:
POSTEN der Parameter:
quelle
Ich glaube, ich habe genau das gefunden, was Sie brauchen. Es kann anderen helfen.
Sie können die Methode UrlEncodedFormEntity.writeTo (OutputStream) verwenden .
quelle
Die akzeptierte Antwort löst eine ProtocolException aus bei:
OutputStream os = conn.getOutputStream();
da die Ausgabe für das URLConnection-Objekt nicht aktiviert wird. Die Lösung sollte Folgendes beinhalten:
conn.setDoOutput(true);
damit es funktioniert.
quelle
Wenn es nicht zu spät ist, möchte ich meinen Code teilen
Utils.java:
MainActivity.java:
quelle
Es gibt einen viel einfacheren Ansatz mit PrintWriter (siehe hier) )
Grundsätzlich brauchen Sie nur:
quelle
AsyncTask
Daten wieJSONObect
überPOST
Methode sendenquelle
Versuche dies:
Sie können so viele hinzufügen,
nameValuePairs
wie Sie benötigen. Und vergessen Sie nicht, die Anzahl in der Liste zu erwähnen.quelle
How to add parameters to HttpURLConnection using POST
- Es führt in die Irre.Zum Aufrufen von POST / PUT / DELETE / GET Restful-Methoden mit benutzerdefinierten Header- oder JSON-Daten kann die folgende Async-Klasse verwendet werden
Und die Verwendung ist
quelle
Mit org.apache.http.client.HttpClient können Sie dies auch auf eine besser lesbare Weise wie unten beschrieben tun.
Innerhalb von try catch können Sie einfügen
quelle
In meinem Fall habe ich eine Funktion wie diese erstellt, um eine Post-Anfrage zu stellen, die eine String-URL und eine Hashmap von Parametern verwendet
quelle
Ich benutze so etwas:
quelle
So übergebe ich "params" (JSONObject) durch POST
quelle