先分清:代理服务器 IP 不是本机地址
第一次配置 HTTP 代理服务器时,最容易卡住的地方不是代码,而是那一排输入框:IP、端口、用户名、密码、白名单。有人把本机地址填进去,有人把 80 当成代理端口,结果请求返回 407,或者一直超时。下面把这几个字段拆开讲,照着填基本不会错。
代理服务器 IP 是服务商分配给你的出口节点地址。它不是你电脑上的 127.0.0.1,也不是公司网关。你可以把它理解成“替你的请求出门的那个门牌号”。如果服务商给你的是 123.45.67.89,端口是 8080,那代理地址通常写成 http://123.45.67.89:8080。
这里有两个常见误区:第一,把本地调试地址当成代理地址;第二,把目标网站的端口当成代理端口。代理端口是代理服务器监听的服务端口,通常由服务商提供,常见的是 8080、3128、8888 等,但一定要以交付文档为准。
IP 和端口:先把入口写对
大多数 HTTP 代理配置只需要四个核心字段:host、port、scheme、认证信息。host 填 IP 或服务商提供的地址;port 填端口;scheme 一般写 http;认证信息看服务商是否要求用户名密码。
| 字段 | 填什么 | 常见错误 |
|---|---|---|
| host | 代理服务器 IP 或服务商提供地址 | 填成目标网站地址 |
| port | 代理服务端口 | 误用 80/443 目标端口 |
| username | 服务商提供的账号 | 漏填或带空格 |
| password | 服务商提供的密码 | 特殊字符未编码 |
| whitelist | 当前出口 IP 或 IP 段 | 填本机私网地址 |
如果项目里要写代码,常见写法是把代理地址放进 proxies 或 proxy 配置里:
proxies = {
"http": "http://user:pass@PROXY_IP:PORT",
"https": "http://user:pass@PROXY_IP:PORT"
}
response = request(url, proxies=proxies, timeout=10)
注意,即使目标地址是 https,代理地址本身也常用 http 开头。代理负责先建立连接,再转发请求,所以不要把“目标网站是 https”直接理解成“代理地址必须写成 https://”。
认证:用户名、密码和 407 的关系
很多代理服务会要求 Basic 认证。简单说,就是每次请求都要带上“你是谁”的信息。如果没带,或者带错,代理服务器就会返回 407 Proxy Authentication Required。
填写时,用户名和密码一般来自服务商后台或交付文档。密码里如果包含 @、:、/、# 等字符,建议先做 URL 编码,再拼进代理地址。否则 123@456 里的 @ 可能被误认为用户名和密码的分隔符。
headers = {
"Proxy-Authorization": "Basic base64(user:pass)"
}
response = request(url, headers=headers, timeout=10)
另外,不要把账号密码写进公开仓库或日志。生产环境里,建议用环境变量或密钥管理工具存放。
白名单:为什么账号密码对了还会被拒
白名单是另一道门。它限制的是“哪些来源 IP 可以调用这个代理”。即使账号密码正确,如果你的出口 IP 不在白名单里,请求也可能被拒绝。
这里要分清两种情况。如果你的项目跑在固定云服务器上,通常填这台云服务器的出口 IP;如果跑在公司内网,通常需要填公司网络出口 IP。你可以先查看当前出口 IP,再找服务商或管理员加入白名单。
如果项目经常获取新的 IP、换个地区的 IP,或者节点 IP 会动态变化,固定白名单就不太适合。这类场景更适合用账号认证,或者选择支持动态 IP 与 API 提取的代理服务。比如神龙HTTP提供 3000万+ 正规授权代理 IP 储备,API 兼容主流爬虫编程语言,可快速集成,并提供文档、示例代码与 7×24 小时技术支持,适合需要稳定提取 IP 的公开数据采集场景。
一份可直接照抄的配置清单
把下面这份清单保存下来,配置时逐项核对,能少踩很多坑:
代理协议:HTTP / HTTPS / SOCKS5(以服务商支持为准)
代理 IP:PROXY_IP
代理端口:PORT
用户名:USER
密码:PASS(含特殊字符需 URL 编码)
白名单:当前出口 IP 或 IP 段
超时时间:10-30 秒
重试策略:失败后获取新的 IP 再试
如果连续失败,优先检查三件事:IP 和端口是否匹配、认证信息是否正确、白名单是否包含当前出口 IP。多数配置问题都会落在这三项里。
常见问题
Q: HTTP 代理和 HTTPS 请求的填写方式一样吗?
A: 代理地址通常都写成 http://IP:PORT,HTTPS 请求也通过代理转发。区别在于目标地址是 https,而代理认证和端口填写方式基本一致。
Q: 为什么一直提示 407?
A: 407 通常是代理认证失败。检查用户名密码是否正确,密码是否做了 URL 编码,以及请求是否携带了 Proxy-Authorization 信息。
Q: 白名单应该填本机 IP 还是出口 IP?
A: 填真实访问代理服务的来源 IP。云服务器一般填出口 IP,公司内网一般填网络出口 IP。本机私网地址通常不能作为白名单依据。
Q: 动态 IP 场景下,白名单怎么配?
A: 如果 IP 经常变化,固定白名单容易失效。更稳妥的方式是使用账号密码认证,或选择支持动态 IP 提取与 API 集成的代理服务,让 IP 获取流程更稳定。





