我有一个无限循环的刮板,我想更改客户端上的代理,以防出现 IP 禁令(403 状态代码)之类的错误,或者我只想在每次循环后更改代理以避免禁令完全地。
这个问题,特别是后一种情况,最终程序在达到允许的最大连接数时崩溃(java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?))。
有没有办法在不构建新代理的情况下更改 HTTP 客户端的代理?
我有一个无限循环的刮板,我想更改客户端上的代理,以防出现 IP 禁令(403 状态代码)之类的错误,或者我只想在每次循环后更改代理以避免禁令完全地。
这个问题,特别是后一种情况,最终程序在达到允许的最大连接数时崩溃(java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?))。
有没有办法在不构建新代理的情况下更改 HTTP 客户端的代理?
有没有办法在不构建新代理的情况下更改 HTTP 客户端的代理?
我假设您正在谈论 JDK 11(及更高版本)java.net.http.HttpClient
API。
javadoc是这样说的:
An
HttpClient
可用于发送请求并检索其响应。AnHttpClient
是通过构建器创建的。构建器可用于配置每个客户端的状态,例如:首选协议版本( HTTP/1.1 或 HTTP/2 )、是否遵循重定向、代理、身份验证器等。一旦构建,anHttpClient
是不可变的,并且可以用于发送多个请求。
我的阅读是您无法更改代理;即你不能替换客户的ProxySelector
对象。
但是,ProxySelector
( javadoc ) 是一个抽象类,您可以创建自己的自定义子类,允许您循环通过许多不同的代理。