0

我有一个无限循环的刮板,我想更改客户端上的代理,以防出现 IP 禁令(403 状态代码)之类的错误,或者我只想在每次循环后更改代理以避免禁令完全地。

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

有没有办法在不构建新代理的情况下更改 HTTP 客户端的代理?

4

1 回答 1

3

有没有办法在不构建新代理的情况下更改 HTTP 客户端的代理?

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

javadoc是这样说的:

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

我的阅读是您无法更改代理;即你不能替换客户的ProxySelector对象。

但是,ProxySelector( javadoc ) 是一个抽象类,您可以创建自己的自定义子类,允许您循环通过许多不同的代理。

于 2019-12-26T23:59:14.877 回答