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 响应可能包含有用的应用或代理错误内容。

相关文章