TL;DR
- OkHttp代理是在
OkHttpClient.Builder上配置的,而不是在单个Request上。 使用.proxy(proxy)来指定一个明确的路由,或者不设置它,让proxySelector选择路由。 - 需要身份验证的代理需要
proxyAuthenticator,它用Proxy-Authorization响应407挑战。 当该头部已存在时停止,这样错误的凭据就无法造成身份验证循环。 - 重用
OkHttpClient实例,而不是每个请求创建一个。 少量预构建的客户端池提供可预测的端点轮换,而不会丢弃连接池和线程池。 - HTTPS仍然通过HTTP代理使用CONNECT。 保持TLS验证启用,因为代理更改的是路由,而不是目标证书的要求。
- 在扩展之前验证路由。 比较观察到的出口IP,验证响应,并将代理连接错误与目标HTTP错误分开分类。
什么是OkHttp代理?
OkHttp代理是由OkHttpClient为出站HTTP和HTTPS连接选择的中介服务器。应用程序将流量发送到代理,代理将其转发到目标并返回响应。OkHttp仍然处理请求、响应、池、超时和TLS;代理控制网络路由和目标可见的源IP。
OkHttp使用Java的java.net.Proxy模型。当前的官方OkHttp代理API表示,显式的proxy优先于proxySelector。如果未设置显式代理,选择器可以从系统或应用程序策略中选择一个。传递Proxy.NO_PROXY强制进行直接连接。
这种标准配置可与内部网关、调试代理或托管端点(例如Nstproxy Residential Prime Proxies)一起使用。代理更改路由;它不授予访问资源的权限,也不会替换特定于目标的速率限制和条款。
为什么与OkHttp使用代理?
当Java或Android应用程序需要受控的出站流量、本地化QA、广告验证、公共数据收集或流量类别之间的分离时,使用OkHttp的代理非常有用。它也可以使网络路径可重现:代码识别所选路线,而操作可以在部署之外更改端点。
会话模型应遵循工作流程。属于一个登录或结账流程的多个请求可能需要稳定的路由,而无关的检查可以使用轮换。Nstproxy的IP轮换概述解释了该网络模式;应用程序仍需有限的并发、响应验证和重试限制。



