更改Java的本机HTTP客户端的代理,而无需构建新的HTTP客户端

时间:2019-12-26 23:35:04

标签: java java-http-client

我有一个无限循环的抓取器,如果发生诸如IP禁令(在403状态代码上)之类的错误,或者我只想在每次循环后更改代理,我想在客户端上更改代理。完全避免使用禁令。

这个问题,尤其是后一种情况,是当程序达到允许的最大连接数时最终崩溃(java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?)。)

是否可以在不构建新客户端的情况下更改HTTP客户端的代理?

1 个答案:

答案 0 :(得分:1)

  

是否可以在不构建新客户端的情况下更改HTTP客户端的代理?

我假设您正在谈论JDK 11(及更高版本)java.net.http.HttpClient API。

javadoc这样说:

  

HttpClient可用于发送请求并检索其响应。 HttpClient是通过构建器创建的。该构建器可用于配置每个客户端的状态,例如:首选协议版本(HTTP / 1.1或HTTP / 2),是否遵循重定向,代理,身份验证器等。一旦构建,{{ 1}}是不可变的,可用于发送多个请求。

我的理解是,您不能更改代理。也就是说,您不能替换客户端的HttpClient对象。

但是,ProxySelectorjavadoc)是一个抽象类,您可以创建自己的自定义子类,以使您可以遍历许多不同的代理。