操作系统设置或浏览器插件只能手动配置一次代理,脚本、爬虫和自动化测试用不上——那里需要用代码接入:在 HTTP 客户端、会话和浏览器驱动三个层级分别设置,并处理断连、核实流量确实经过了指定地址。

带账号密码的连接字符串格式

代码中使用的代理地址遵循统一格式:protocol://login:password@host:port。协议部分决定工作模式(http、https、socks5),账号和密码之间用冒号分隔,置于 @ 符号之前,其后是主机和端口。多数 HTTP 客户端库与浏览器驱动都能直接接收这一整串字符串,无需把账号密码作为独立参数传入。

密码中若包含 @ 或其他 URL 保留字符,必须先做百分号编码,否则解析器会在第一个特殊字符处截断字符串,导致连接携带错误的凭据。自动生成的账号密码应在拼接前统一走 URL 编码函数处理,而不是每次出错后再肉眼核对。

HTTP 与 SOCKS 模式的区别

HTTP 模式工作在协议层:服务端能解析 HTTP 请求并读取请求头。对 HTTPS 流量它并不解密内容,而是通过 CONNECT 方法直接转发加密的 TLS 连接,因此 HTTP 模式同样适用于 http 和 https 两类地址,与名称无关。

SOCKS 模式(实践中几乎都是 SOCKS5)工作在更底层,完全不解析应用层协议,只在客户端与目标之间转发字节。SOCKS5 对 HTTP 及任意 TCP 连接都是透明的,且与 HTTP 模式不同,它还支持 UDP——这对 DNS 查询和部分网络库很重要。域名解析也可以交给同一服务端本地完成,避免主机名以明文形式经本地 DNS 泄露,这对地域敏感的网站尤为关键。普通抓取用 HTTP 模式即可,自带协议的网络工具则需要 SOCKS5。

客户端、会话与浏览器驱动三个层级的配置

地址可以在三个层级设置,彼此并不能互相替代。请求级——每次调用客户端时单独传参,适合每个请求都要换地址的场景,例如逐页轮换 IP。会话级——创建会话或连接池时设置一次,此后所有请求复用同一出口和长连接,减少 TLS 握手开销,并在流程中保持 IP 一致,这对需核对登录各步骤地址是否一致的网站很关键。

浏览器驱动层级更复杂:启动参数通常只接受主机和端口,字符串本身不支持账号密码。需要鉴权的通道常见做法有两种——用插件拦截浏览器弹出的鉴权对话框并自动填入凭据,或用驱动拦截网络事件、以程序方式回应浏览器的鉴权请求。具体步骤见antidetect 浏览器代理配置一文。

连接错误的处理

中间层的错误和目标网站的错误性质不同,应按状态码和异常类型区分,而非仅凭请求失败判断。鉴权失败——服务端返回 407 而非网站响应,说明账号、密码或连接字符串有误,或付费额度已到期,原样重试没有意义。超时与连接中断——服务端未响应或在收到回复前中断会话,应设置合理超时并搭配有限次数、带间隔的重试,而不是立即重试。

目标网站的拒绝——返回 403、验证码或跳转验证页面,这不是连接层的错误,而是该地址已被用过或信誉不达标的信号,用同一 IP 再次请求没有意义,需更换地址。提前分辨地址好坏的方法见代理质量指标一文。

如何确认请求真的经过了代理

正式任务开始前,建议先访问任意一个能返回请求方 IP 的服务,并与客户端真实地址比对——一次调用就能排除配置项虽已填写、但因笔误而实际直连的情况。

其次要留意透明节点可能附加的请求头:X-Forwarded-For 或 Via 中可能带有客户端原始地址。这类节点虽接受了连接,却在请求头里泄露了真实 IP,对匿名性有要求的任务需要不带这类请求头的高匿模式。若地址按会话轮换,核查应内建到轮换逻辑本身,详见通过 API 轮换 IP一文。

浏览器驱动的核查更麻烦:浏览器可能通过 WebRTC 绕开已配置的路由,建立直接的 P2P 连接,从而泄露本机地址,有时甚至是公网地址。若场景对此类泄露敏感,应单独用启动参数关闭 WebRTC,而不能只依赖该路由本身。

常见问题

同一个代理能否同时供 HTTP 客户端和浏览器驱动使用?

如果地址类型同时支持两种模式,技术上可行,但实践中通常建立两条独立连接:客户端与驱动的重试逻辑、连接生命周期都不同,两个进程共用一个出口还会因请求模式相近而提高被封概率。

为什么同一条连接字符串,在一个 HTTP 客户端里能用,换一个就不行?

不同库对连接字符串的解析方式不同,对相关环境变量的处理也不一样——有的客户端会自动读取,有的需要显式传参,还有的完全忽略系统设置。跨库迁移代码时应显式传入连接字符串,不要依赖隐式行为。

每次请求后是否需要手动关闭与代理的连接?

会话模式下不需要——连接由连接池复用,空闲超时或会话关闭时才会释放。只有当场景需要连接保持的时间明显长于任务本身时,才有必要手动关闭,否则容易触及按会话分配地址的通道的并发上限。

带账号密码、支持 HTTP 与 SOCKS5 模式的方案及接入文档,见代理专区;程序化接入的请求格式与限额说明见代理 API