Enviar um POST de formulário através de um proxy HTTP com Java HttpURLConnection
Abra uma conexão com um proxy HTTP explícito, escolha POST, escreva o corpo do formulário e inspecione o resultado HTTP.
openConnection(proxy) constrói a conexão com uma rota. Defina o método HTTP e o corpo na HttpURLConnection retornada antes de iniciar o pedido:
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();
}O exemplo envia um formulário pequeno, imprime o respetivo estado e fecha um fluxo de resposta não utilizado. Substitua esse último passo pelo tratamento do corpo da resposta na aplicação quando o corpo for necessário.
O nome do anfitrião e a porta do proxy pertencem a route. Para um teste público de formulário permitido sem conta de proxy, escolha o endereço HTTP de uma entrada na lista de proxies HTTP. O URL continua a ser o ponto final do formulário. Para valores de formulário dinâmicos, use URLEncoder para codificar cada valor em vez de juntar entrada não escapada com sinais de igual e ampersands.
O fluxo de saída envia os bytes preparados. Leia o estado após a escrita e o fecho, e depois escolha o fluxo de resposta normal ou o de erro conforme necessário. Uma resposta HTTP mal sucedida pode conter conteúdo de erro útil da aplicação ou do proxy.