我试图用 HttpURLConnection
做 POST (我需要这样使用它,不能使用 HttpPost
)并且我想为该连接添加参数,例如
post.setEntity(new UrlEncodedFormEntity(nvp));
哪里
nvp = new ArrayList<NameValuePair>();
有一些数据存储在 . 我找不到如何将此 ArrayList
添加到我的 HttpURLConnection
的方法,这是在这里:
HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
https.setHostnameVerifier(DO_NOT_VERIFY);
http = https;
http.setRequestMethod("POST");
http.setDoInput(true);
http.setDoOutput(true);
这种尴尬的https和http组合的原因是不需要验证证书 . 但这不是问题,它可以很好地发布服务器 . 但是我需要用论据发帖 .
有任何想法吗?
Duplicate Disclaimer:
回到2012年,我不知道如何将参数插入到 HTTP POST 请求中 . 我一直在 NameValuePair
,因为它是在教程中 . 这个问题可能看起来像是重复的,但是,我的2012年自我阅读了other问题,而 NOT 正在使用 NameValuePair
. 事实上,它并没有解决我的问题 .
15 回答
您可以获取连接的输出流并将参数查询字符串写入其中 .
...
由于NameValuePair已弃用 . 想分享我的代码
....
如果您不需要
ArrayList<NameValuePair>
for参数,这是使用Uri.Builder
类构建查询字符串的较短解决方案:一种解决方案是制作自己的params字符串 .
这是我用于最新项目的实际方法 . 您需要将args从hashtable更改为namevaluepair:
张贴参数:
我想我找到了你需要的东西 . 它可能会帮助别人 .
您可以使用UrlEncodedFormEntity.writeTo(OutputStream)方法 .
接受的答案抛出ProtocolException:
OutputStream os = conn.getOutputStream();
因为它不启用URLConnection对象的输出 . 解决方案应包括:
conn.setDoOutput(true);
使它工作 .
如果还不晚,我想分享我的代码
Utils.java:
MainActivity.java:
使用PrintWriter有一种更简单的方法(参见here)
基本上你只需要:
AsyncTask
通过POST
方法将数据发送为JSONObect
试试这个:
您可以根据需要添加任意数量的
nameValuePairs
. 别忘了在列表中提及计数 .通过使用org.apache.http.client.HttpClient,您可以使用更易读的方式轻松完成此操作,如下所示 .
在try catch中你可以插入
要使用自定义标头或json数据调用POST / PUT / DELETE / GET Restful方法,可以使用以下Async类
用法是
我使用这样的东西:
在我的情况下,我创建了这样的函数来生成Post请求,它接受String url和参数的hashmap
这就是我通过POST传递“params”(JSONObject)的方法