Enviar un POST de formulari a través d'un proxy HTTP amb Java HttpURLConnection
Obriu una connexió amb un proxy HTTP explícit, trieu POST, escriviu el cos del formulari i reviseu el resultat HTTP.
openConnection(proxy) construeix la connexió amb una ruta. Definiu el mètode HTTP i el cos a la HttpURLConnection retornada abans d'iniciar la petició:
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();
}L'exemple envia un formulari petit, imprimeix el seu estat i tanca un flux de resposta no utilitzat. Substituïu aquest darrer pas pel tractament del cos de resposta de l'aplicació quan calgui el cos.
El nom d'amfitrió i el port del proxy pertanyen a route. Per a una prova pública de formulari permesa sense compte de proxy, trieu l'adreça HTTP d'una entrada de la llista de proxies HTTP. L'URL continua sent el punt final del formulari. Per a valors dinàmics del formulari, feu servir URLEncoder per codificar cada valor en lloc d'ajuntar entrada sense escapar amb signes igual i emfasers.
El flux de sortida envia els bytes preparats. Llegiu l'estat després d'escriure i tancar-lo, i trieu el flux de resposta ordinari o el d'error segons correspongui. Una resposta HTTP no reeixida pot contenir contingut útil d'error de l'aplicació o del proxy.