【问题标题】:Add Proxy to HttpRequest in java在java中为HttpRequest添加代理
【发布时间】:2020-09-13 19:51:06
【问题描述】:

我试图了解如何为每个使用 Java API 构建的请求实现代理的使用:

    HttpClient client = HttpClient.newHttpClient();

    HttpRequest request = HttpRequest.newBuilder()
            .version(HttpClient.Version.HTTP_2)
            .uri(URI.createh("https://myurl"))
            .timeout(Duration.ofMinutes(2))
            .setHeader("User-Agent","Just an user agent")
            .GET()
            .build();

    HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

我从文档中看到 (https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.html#Asynchronous%20Example) Synchronous 请求可以做到这一点。我的代码在一个方法中,它将与线程并行运行。那么如何使用Asynchronous Requests 设置代理呢?如果不可能,它们之间有什么区别?

【问题讨论】:

  • 异步示例使用与同步示例相同的HttpClient。你在building the client时设置了代理。
  • @Slaw 不,如果您尝试将代理方法添加到链中,在我的情况下,我 HttpClientC.Builder().proxy(...).newHttpClient() 但这似乎不起作用。
  • @Slaw 在我发帖时已解决,谢谢。

标签: java post get httprequest httpapi


【解决方案1】:

已解决,文档对此有点不清楚,但最后,我能够在构建客户端时设置代理:

    HttpClient client = HttpClient.newBuilder().
        proxy(ProxySelector.of(new InetSocketAddress("proxy",port))))
        .build();

   //The request code is identical to what I wrote above.

无论如何,方法是newBuilder,而不是Builder

【讨论】:

  • 请注意,“可构建”类有一个名为 newBuilder 的方法来创建构建器,这是构建器模式中相对常见的情况。尤其是当构建器是一个接口时。
  • @Slaw 是的,但在您的链接中有对 Builder 方法的引用,而不是对 newBuilder 的引用
  • 啊。我的链接是指向 HttpClient.Builder#proxy(ProxySelector) 方法的链接,可以准确地显示您指定代理的位置,因为这是您似乎最感兴趣的内容。请注意,HttpClient.Builder 不表示方法,而是表示嵌套接口。
  • @Slaw 我看的不够仔细。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多