1. ホーム
  2. java

[解決済み] Java - POSTメソッドでHTTPパラメータを簡単に送信する

2022-03-17 03:03:44

質問

以下のコードを使用して、うまく送信できています。 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 メソッドを使用します。 私は、そのメソッドに追加のパラメータ(すなわち、文字列httpMethod)を追加することを考えていました。

上記のコードをできるだけ変更せずに、パラメータを GET または POST ?

を変更することを望んでいました。

connection.setRequestMethod("GET");

になります。

connection.setRequestMethod("POST");

を使えばいいのですが、パラメータはまだGETメソッドで送信されています。

ハス HttpURLConnection は、何か役に立つメソッドがあるのでしょうか? 何か役に立つJavaの構成要素はありますか?

どんなことでもご相談ください。

解決方法は?

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 );
}