Java - POSTメソッドでHTTPパラメータを簡単に送信する 質問する

Java - POSTメソッドでHTTPパラメータを簡単に送信する 質問する

このコードを使用して、メソッドHTTP経由でいくつかのパラメータを含むリクエストを送信していますGET

void sendRequest(String request) {
    // i.e.: request = "http://example.com/index.php?param1=a&param2=b&param3=c";
    URL url = new URL(request);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setInstanceFollowRedirects(false);
    connection.setRequestMethod("GET");
    connection.setRequestProperty("Content-Type", "text/plain");
    connection.setRequestProperty("charset", "utf-8");
    connection.connect();
}

ここで、パラメータ (param1、param2、param3)POSTは非常に長いため、メソッド経由で送信する必要があるかもしれません。そのメソッドに追加のパラメータ (String httpMethod) を追加することを考えていました。

または 経由でパラメータを送信できるように、上記のコードをできるだけ変更するにはどうすればよいですGETPOST?

私は変化を期待していました

connection.setRequestMethod("GET");

connection.setRequestMethod("POST");

うまくいきましたが、パラメータは依然として GET メソッド経由で送信されます。

HttpURLConnection役立つ方法はありますか? 役に立つ Java 構造はありますか?

どのような助けでも大歓迎です。

ベストアンサー1

GET リクエストでは、パラメータは URL の一部として送信されます。

POST リクエストでは、パラメーターはヘッダーの後にリクエストの本文として送信されます。

HttpURLConnection を使用して POST を実行するには、接続を開いた後に接続にパラメータを書き込む必要があります。

このコードで開始できます:

String urlParameters  = "param1=a&param2=b&param3=c";
byte[] postData       = urlParameters.getBytes( StandardCharsets.UTF_8 );
int    postDataLength = postData.length;
String request        = "http://example.com/index.php";
URL    url            = new URL( request );
HttpURLConnection conn= (HttpURLConnection) url.openConnection();           
conn.setDoOutput( true );
conn.setInstanceFollowRedirects( false );
conn.setRequestMethod( "POST" );
conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded"); 
conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
conn.setUseCaches( false );
try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
   wr.write( postData );
}

おすすめ記事