Отправка POST-формы через HTTP-прокси с помощью Java HttpURLConnection
Откройте соединение с явным HTTP-прокси, выберите POST, запишите тело формы и проверьте результат HTTP.
openConnection(proxy) создаёт соединение с маршрутом. Задайте метод HTTP и тело у возвращённого HttpURLConnection до начала запроса:
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 может содержать полезное содержимое ошибки приложения или прокси.