使用 Java HttpURLConnection 通过 HTTP 代理发送表单 POST
使用显式 HTTP 代理打开连接,选择 POST,写入表单正文并查看 HTTP 结果。
openConnection(proxy) 会用路由构建连接。在发起请求之前,先在返回的 HttpURLConnection 上设置 HTTP 方法和正文:
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 响应可能包含有用的应用或代理错误内容。