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 レスポンスには、アプリケーションやプロキシの有用なエラー内容が含まれることがあります。

関連記事