Надсилання 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 може містити корисний вміст помилки застосунку або проксі.