1. ホーム
  2. アンドロイド

[解決済み】HttpURLConnectionにNameValuePairを使用してPOSTでパラメータを追加する方法

2022-04-01 03:06:32

質問

を行おうとしています。 POST HttpURLConnection (この方法で使用する必要があります。 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年の自分は、次のように読みました。 その他 の質問で、それは NOT を使って 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();
}