Java HttpURLConnection で HTTP プロキシ経由のフォーム POST を送信する
明示的な HTTP プロキシで接続を開き、POST を選択し、フォームの本文を書き込み、HTTP の結果を確認します。
openConnection(proxy) はルートを指定して接続を構築します。リクエストを開始する前に、返された HttpURLConnection に HTTP メソッドと本文を設定します:
Proxy route = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("proxy.example", 8080));
HttpURLConnection connection = (HttpURLConnection)
URI.create("http://www.example.com/submit").toURL().openConnection(route);
try {
connection.setConnectTimeout(5000);
connection.setReadTimeout(15000);
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded; charset=UTF-8");
byte[] form = "message=hello+proxy".getBytes(StandardCharsets.UTF_8);
try (OutputStream out = connection.getOutputStream()) {
out.write(form);
}
int status = connection.getResponseCode();
System.out.println(status);
InputStream response = status >= 400
? connection.getErrorStream() : connection.getInputStream();
if (response != null) response.close();
} finally {
connection.disconnect();
}この例は小さなフォームを送信し、ステータスを出力して、未使用のレスポンスストリームを閉じます。本文が必要な場合は、この最後の手順をアプリケーションのレスポンス本文処理に置き換えてください。
プロキシのホスト名とポートは route に属します。プロキシアカウントなしで許可された公開フォームのテストでは、HTTP プロキシ一覧 の項目から HTTP アドレスを選びます。URL はフォームのエンドポイントのままです。動的なフォーム値には、エスケープされていない入力を等号やアンパサンドで連結するのではなく、URLEncoder で各値をエンコードしてください。
出力ストリームは準備したバイトを送信します。書き込みとクローズの後にステータスを読み取り、必要に応じて通常のレスポンスストリームかエラー用ストリームを選びます。失敗した HTTP レスポンスには、アプリケーションやプロキシの有用なエラー内容が含まれることがあります。