Próbuję zrobić POST z HttpURLConnection
(muszę używać go w ten sposób, nie można użyć HttpPost
) i chciałbym dodać do tego parametry połączenia, takich jak
post.setEntity(new UrlEncodedFormEntity(nvp));
gdzie
nvp = new ArrayList<NameValuePair>();
posiadanie niektórych danych. Nie mogę znaleźć sposobu, aby dodać to ArrayList
do mojego, HttpURLConnection
który jest tutaj:
HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
https.setHostnameVerifier(DO_NOT_VERIFY);
http = https;
http.setRequestMethod("POST");
http.setDoInput(true);
http.setDoOutput(true);
Powodem tej niezręcznej kombinacji https i http jest konieczność nie weryfikowania certyfikatu. Nie stanowi to jednak problemu, dobrze publikuje serwer. Ale potrzebuję tego, aby zamieszczać argumenty.
Jakieś pomysły?
Duplikat zastrzeżenia:
W 2012 roku nie miałem pojęcia, jak parametry zostały wstawione do żądania HTTP POST . Trzymałem się tego, NameValuePair
ponieważ był w tutorialu. To pytanie może wydawać się duplikatem, jednak moje ja z 2012 roku przeczytałem to drugie pytanie i NIE było z niego korzystać NameValuePair
. W rzeczywistości nie rozwiązało to mojego problemu.
Odpowiedzi:
Możesz pobrać strumień wyjściowy dla połączenia i zapisać do niego ciąg zapytania parametru.
...
źródło
URL url = new URL("http://yoururl.com?k1=v1&k2=v2&···&kn=vn");
wtedy, gdy ustawisz conn, aby używał metody POST, nie musisz ich zapisywać.Ponieważ NameValuePair jest przestarzałe. Myśl o udostępnieniu mojego kodu
…
źródło
""result""
?OutputStream os = conn.getOutputStream();
na żelku, który nie dotyczy adresu związanego z nazwą hosta?Jeśli nie potrzebujesz
ArrayList<NameValuePair>
parametrów for, jest to krótsze rozwiązanie, które buduje ciąg zapytania za pomocąUri.Builder
klasy:źródło
Jednym z rozwiązań jest utworzenie własnego ciągu parametrów.
To jest faktyczna metoda, której użyłem do mojego najnowszego projektu. Musisz zmienić argumenty z hashtable na namevaluepair:
WYKONYWANIE parametrów:
źródło
Myślę, że znalazłem dokładnie to, czego potrzebujesz. Może pomóc innym.
Możesz użyć metody UrlEncodedFormEntity.writeTo (OutputStream) .
źródło
Zaakceptowana odpowiedź zgłasza wyjątek protokołu w:
OutputStream os = conn.getOutputStream();
ponieważ nie włącza danych wyjściowych dla obiektu URLConnection. Rozwiązanie powinno obejmować:
conn.setDoOutput(true);
aby działało.
źródło
Jeśli nie jest za późno, chciałbym udostępnić mój kod
Utils.java:
MainActivity.java:
źródło
Jest o wiele łatwiejsze podejście przy użyciu PrintWriter (patrz tutaj )
Zasadniczo wszystko czego potrzebujesz to:
źródło
AsyncTask
wysłać dane jakJSONObect
za pomocąPOST
metodyźródło
Spróbuj tego:
Możesz dodać tyle,
nameValuePairs
ile potrzebujesz. I nie zapomnij wspomnieć o liczbie na liście.źródło
How to add parameters to HttpURLConnection using POST
- wprowadza w błąd.Aby wywołać metody POST / PUT / DELETE / GET Restful z niestandardowym nagłówkiem lub danymi json, można użyć następującej klasy Async
I wykorzystanie jest
źródło
Korzystając z org.apache.http.client.HttpClient, możesz łatwo to zrobić w bardziej czytelny sposób, jak poniżej.
W ramach try catch możesz wstawić
źródło
W moim przypadku utworzyłem taką funkcję, aby utworzyć żądanie Post, które pobiera ciąg adresu URL i skrót mapy parametrów
źródło
Używam czegoś takiego:
źródło
w ten sposób przekazuję „parametry” (JSONObject) przez POST
źródło