Estou tentando fazer o POST com HttpURLConnection
(eu preciso usá-lo dessa maneira, não posso usar HttpPost
) e gostaria de adicionar parâmetros a essa conexão, como
post.setEntity(new UrlEncodedFormEntity(nvp));
Onde
nvp = new ArrayList<NameValuePair>();
tendo alguns dados armazenados. Não consigo encontrar uma maneira de adicionar isso ArrayList
ao meu, HttpURLConnection
que está aqui:
HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
https.setHostnameVerifier(DO_NOT_VERIFY);
http = https;
http.setRequestMethod("POST");
http.setDoInput(true);
http.setDoOutput(true);
O motivo dessa combinação estranha de https e http é a necessidade de não verificar o certificado. Isso não é um problema, no entanto, ele publica bem o servidor. Mas eu preciso postar com argumentos.
Alguma ideia?
Isenção de responsabilidade duplicada:
Em 2012, eu não tinha ideia de como os parâmetros foram inseridos em uma solicitação HTTP POST . Eu estava me apegando NameValuePair
porque estava em um tutorial. Esta questão pode parecer uma duplicata, no entanto, meu auto de 2012 leu essa outra pergunta e NÃO estava usando NameValuePair
. De fato, não resolveu meu problema.
Respostas:
Você pode obter o fluxo de saída para a conexão e gravar a string de consulta do parâmetro nela.
...
fonte
URL url = new URL("http://yoururl.com?k1=v1&k2=v2&···&kn=vn");
quando definir o conn para usar o método POST, não precisará escrevê-los.Como o NameValuePair está obsoleto. Pensei em compartilhar meu código
....
fonte
""result""
?OutputStream os = conn.getOutputStream();
no Jelly Bean em relação a nenhum endereço associado ao nome do host?Se você não precisar dos
ArrayList<NameValuePair>
parâmetros for, esta é uma solução mais curta que cria a cadeia de consulta usando aUri.Builder
classe:fonte
Uma solução é criar sua própria string de parâmetros.
Este é o método real que eu tenho usado para o meu projeto mais recente. Você precisa alterar args de hashtable para namevaluepair:
POSTANDO os parâmetros:
fonte
Acho que encontrei exatamente o que você precisa. Isso pode ajudar os outros.
Você pode usar o método UrlEncodedFormEntity.writeTo (OutputStream) .
fonte
A resposta aceita lança uma ProtocolException em:
OutputStream os = conn.getOutputStream();
porque não habilita a saída para o objeto URLConnection. A solução deve incluir o seguinte:
conn.setDoOutput(true);
para fazer funcionar.
fonte
Se não for tarde demais, gostaria de compartilhar meu código
Utils.java:
MainActivity.java:
fonte
Há uma abordagem muito mais fácil usando o PrintWriter (veja aqui )
Basicamente, tudo que você precisa é:
fonte
AsyncTask
enviar dados comoJSONObect
viaPOST
Métodofonte
Tente o seguinte:
Você pode adicionar quantas
nameValuePairs
você precisar. E não se esqueça de mencionar a contagem na lista.fonte
How to add parameters to HttpURLConnection using POST
- engana.Para chamar métodos POST / PUT / DELETE / GET Restful com cabeçalho personalizado ou dados json, a seguinte classe Async pode ser usada
E o uso é
fonte
Usando org.apache.http.client.HttpClient, você também pode fazer isso facilmente com a maneira mais legível, conforme abaixo.
Dentro do try catch, você pode inserir
fonte
No meu caso, eu criei uma função como essa para fazer a solicitação Post, que leva o URL da String e o hashmap dos parâmetros
fonte
Eu uso algo como isto:
fonte
é assim que passo "params" (JSONObject) pelo POST
fonte