android – 如何使用NameValuePair使用POST向HttpURLConnection添加参数

我正在尝试使用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组合的原因是不需要验证证书.但这不是问题,它可以很好地发布服务器.但是我需要用论据发帖.

有任何想法吗?

重复免责声明:

回到2012年,我不知道如何将参数插入到HTTP POST请求中.我在NameValuePair上,因为它是在教程中.这个问题可能看似重复,但是,我的2012年自己阅读了other问题并且它没有使用NameValuePair.事实上,它并没有解决我的问题.

解决方法:

您可以获取连接的输出流并将参数查询字符串写入其中.

URL url = new URL("http://yoururl.com");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("firstParam", paramValue1));
params.add(new BasicNameValuePair("secondParam", paramValue2));
params.add(new BasicNameValuePair("thirdParam", paramValue3));

OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();

conn.connect();

private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
{
    StringBuilder result = new StringBuilder();
    boolean first = true;

    for (NameValuePair pair : params)
    {
        if (first)
            first = false;
        else
            result.append("&");

        result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
        result.append("=");
        result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
    }

    return result.toString();
}
上一篇:获取对Java的默认http(s)URLStreamHandler的引用


下一篇:是否可以仅使用JDK或HttpComponents处理JSON响应?