Enviar un POST de formulario a través de un proxy HTTP con Java HttpURLConnection
Abra una conexión con un proxy HTTP explícito, elija POST, escriba el cuerpo del formulario e inspeccione su resultado HTTP.
openConnection(proxy) construye la conexión con una ruta. Establezca el método HTTP y el cuerpo en la HttpURLConnection devuelta antes de iniciar la solicitud:
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();
}El ejemplo envía un formulario pequeño, imprime su estado y cierra un flujo de respuesta sin usar. Sustituya ese último paso por el manejo del cuerpo de respuesta de la aplicación cuando se necesite el cuerpo.
El nombre de host y el puerto del proxy pertenecen a route. Para una prueba pública de formulario permitida sin cuenta de proxy, elija la dirección HTTP de una entrada en la lista de proxies HTTP. La URL sigue siendo el punto de conexión del formulario. Para valores de formulario dinámicos, use URLEncoder para codificar cada valor en lugar de unir entrada sin escapar con signos igual y ampersands.
El flujo de salida envía los bytes preparados. Lea el estado después de escribir y cerrar, y luego elija el flujo de respuesta normal o el de error según corresponda. Una respuesta HTTP no exitosa puede contener contenido útil de error de la aplicación o del proxy.