Een formulier-POST via een HTTP-proxy versturen met Java HttpURLConnection
Open een verbinding met een expliciete HTTP-proxy, kies POST, schrijf de formulierinhoud en bekijk het HTTP-resultaat.
openConnection(proxy) bouwt de verbinding met een route. Stel de HTTP-methode en de body in op de teruggegeven HttpURLConnection voordat je het verzoek start:
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();
}Het voorbeeld verstuurt een klein formulier, drukt de status af en sluit een ongebruikte antwoordstroom. Vervang die laatste stap door de afhandeling van de antwoordbody in de applicatie wanneer de body nodig is.
De hostnaam en poort van de proxy horen bij route. Voor een toegestane openbare formuliertest zonder proxyaccount kies je het HTTP-adres uit een vermelding in de HTTP-proxylijst. De URL blijft het eindpunt van het formulier. Voor dynamische formulierwaarden gebruik je URLEncoder om elke waarde te coderen in plaats van niet-escaped invoer samen te voegen met gelijktekens en ampersands.
De uitvoerstroom verstuurt de voorbereide bytes. Lees de status nadat je hebt geschreven en gesloten, en kies daarna de gewone of de fout-antwoordstroom zoals nodig. Een niet-succesvol HTTP-antwoord kan nuttige foutinhoud van de applicatie of de proxy bevatten.