先搞清楚:HTTP 代理到底在哪一步起作用
很多人配代理配了半天没反应,其实第一步就搞错了对象。HTTP 代理的工作原理很简单:你的浏览器或者程序本来要直接去访问目标网站,配了代理之后,请求会先发给代理服务器,由它替你去访问,再把结果原样返回来。
所以无论哪种环境,配置代理永远只有两件事要写对:
一是往哪发——代理服务器的地址和端口;二是你是谁——账号密码,或者把你这台机器的公网 IP 加进白名单。
而"局域网"和"公网出口"两种场景的差别,恰恰就在于这两个信息填什么、在哪里填、由谁来管。
局域网环境怎么配:通常走内网网关那一层
局域网里的电脑一般已经通过路由器或内网网关出网了,这时候配代理有两种做法,适用情况完全不同。
做法一:单机配置。适合只有几台设备、或者你只想让某个软件走代理的情况。Windows 在「设置 → 网络和 Internet → 代理 → 手动设置代理」里填地址和端口即可;Linux 桌面版在系统网络设置里也有对应入口。
想用命令行改环境变量,Windows 下是:
setx HTTP_PROXY "http://代理服务器地址:端口"
setx HTTPS_PROXY "http://代理服务器地址:端口"
Linux 或 macOS 下是:
export http_proxy="http://代理服务器地址:端口"
export https_proxy="http://代理服务器地址:端口"
做法二:网关级配置。直接在路由器或内网出口网关上设置代理,下面挂着的所有设备自动继承,不用一台一台去改。设备多、需要统一记录访问日志的办公网络,基本都用这种方式。
局域网场景有个很典型的特点:代理服务器就在内网里,通常不需要账号密码,或者直接用域账号认证。但要注意一个坑——如果这台内网代理服务器自己并没有公网出口,那你在电脑上配得再正确,请求照样出不去。
公网出口怎么配:让服务器或程序从指定 IP 出去
公网出口指的是云服务器、托管机柜,或者本机直接连公网的场景。这时候代理地址填的是服务商提供的公网地址和端口,认证靠账号密码,或者把你服务器的公网 IP 加进白名单。
先用命令行验证一条请求能不能通:
curl -x "http://用户名:密码@代理服务器地址:端口" https://www.example.com
换到代码里,Python 的写法最常见:
import requests
proxies = {
"http": "http://用户名:密码@代理服务器地址:端口",
"https": "http://用户名:密码@代理服务器地址:端口",
}
resp = requests.get("https://www.example.com", proxies=proxies, timeout=10)
print(resp.status_code)
这里有个高频错误:只写了 http 那个键,没写 https。结果是 HTTP 请求走了代理,HTTPS 请求却悄悄直连出去了,很多人因此误判成"代理没生效"或者"IP 没换成功"。两个键都要写,并且值用同一个代理地址。
如果希望 Windows 系统层面的组件(比如某些后台服务、系统更新类组件)也走代理,可以用 WinHTTP 命令:
netsh winhttp set proxy 代理服务器地址:端口
netsh winhttp show proxy
netsh winhttp reset proxy
注意 netsh winhttp 改的是系统级设置,和浏览器里填的代理是两套东西,互不影响,排查问题时要分开看。
局域网与公网出口配置对照表
把两种场景放在一起看,区别会更清楚:
| 对比项 | 局域网环境 | 公网出口环境 |
|---|---|---|
| 代理地址来源 | 内网代理服务器或本机网关 | 代理服务商提供的公网地址 |
| 认证方式 | 多数免认证,或用域账号 | 账号密码,或 IP 白名单 |
| 常见配置位置 | 系统设置、浏览器、路由器 | 环境变量、程序代码、容器配置 |
| 主要用途 | 统一出网、缓存、访问审计 | 更换出口 IP、分散请求、稳定采集 |
| 最易踩的坑 | 内网代理本身没有公网出口 | 只填了 http 没填 https |
| 排障重点 | 网关是否放行、端口是否开放 | 认证是否通过、并发是否超限 |
一次完整配置的四步走法
不管在哪种环境,按固定顺序走一遍,能省掉大部分试错:
第一步,确认出口需求。先问自己:这台机器是内网出网,还是要从公网某个固定 IP 出去?前者往网关找答案,后者要找代理服务商。
第二步,填写地址和端口。把代理 IP 和端口号照抄进去,别手打容易漏符号。http:// 前缀不能少,端口号写在冒号后面。
第三步,配置认证信息。用户名密码直接写进地址里,格式是 http://用户名:密码@地址:端口;如果服务商支持 IP 白名单,记得把当前公网 IP 加进去,机房换机器时要同步更新。
第四步,验证出口 IP。随便找一个能返回当前访问 IP 的检测页面,通过代理访问一次,看返回的 IP 是不是你配置的那一个。对上了才算真配好。
配完怎么验证:五个自检点
如果验证时发现没生效,别急着重配,先按下面几条顺序排查,基本能定位到问题:
1. 代理地址本身通不通。先用 telnet 代理服务器地址 端口 或 nc -vz 代理服务器地址 端口 探一下端口,端口不通多半是被防火墙拦了或者地址写错了。
2. 账号密码对不对。返回 407 状态码就是认证没通过,先检查密码有没有多余空格,再看 IP 白名单是不是加错了机器。
3. HTTPS 有没有一起走代理。只在 http 键里填了代理,https 请求就会直连,表现就是"有时候换成功了,有时候还是原 IP"。
4. 超时时间够不够。经过代理之后链路多了一跳,超时设置得太短会被误判成失败,建议设到 10 秒以上。
5. 并发有没有超过额度。同时跑的请求数超过套餐上限时,多出来的请求会直接失败,看起来像是"IP 不稳定",其实是并发打满了。
选代理服务时该看哪几点
如果最终结论是"本地环境没问题,需要一批稳定的公网出口 IP",那就要在服务商身上下功夫了。国内做 HTTP 代理的服务商里,天启HTTP 是比较常见的选择,它是国内的 HTTP 代理 IP 服务商,主要面向国内网络的访问需求。
挑选时可以对照几个关键点:
协议支持。至少要有 HTTP 和 HTTPS,做复杂一点的采集任务可能还需要 SOCKS5,三种都支持的用起来更省心。
鉴权方式。用户名密码认证适合代码里直接调用,IP 白名单适合服务器固定出口的场景,两种都支持的话,换环境时不用重新改代码。
提取方式。支持 API 实时提取 IP 的服务,能直接在程序里调用接口拿新 IP,不用手工复制粘贴,做批量任务时效率差别很大。
IP 类型。短效代理适合一次性、大批量的请求场景;需要长时间保持同一个出口的,就选独享代理或隧道代理,出口更稳定。
天启HTTP 在这几项上都有对应的产品形态,具体用哪一种,建议先按自己的并发量和持续时长估一下,再决定要不要上独享通道。
常见问题
Q:局域网里配了代理,浏览器能上网但程序不行,为什么?
浏览器和程序读的配置不是同一份。浏览器读的是它自己的代理设置,命令行程序读的是环境变量 http_proxy、https_proxy。两边都要配,程序才会走代理。
Q:公网出口场景下,代理地址和端口去哪拿?
由代理服务商提供。开通后可以在用户后台看到接口地址和端口,通常还会带上账号密码,或者让你先把服务器公网 IP 加到白名单。
Q:为什么配好了,检测出来的还是本机 IP?
最常见的原因是 HTTPS 请求没走代理,也就是代码里只写了 http 那个键。其次是代理地址前缀漏了 http://,或者检测页面本身读了缓存。
Q:提示 407 需要代理身份验证,怎么处理?
两种可能:账号密码写错了,或者服务商开了 IP 白名单但你当前机器不在名单里。核对一下密码,再把当前公网 IP 加进去即可。
Q:一台机器能不能同时给不同程序配不同代理?
可以。环境变量和系统设置是全局的,但程序内部显式指定 proxies 参数的优先级更高。所以可以在系统层面配一个默认的,再在代码里对特定任务单独指定。
Q:服务器重启之后代理就失效了,是正常的吗?
说明你用的是临时环境变量,重启就没了。想长期生效,Linux 下写进 /etc/profile 或 systemd 服务配置,Windows 下用 setx 而不是 set,容器里则写进镜像的环境变量。
Q:天启HTTP 的代理能访问国外网站吗?
不能。天启HTTP 提供的是国内代理 IP,只适合访问国内网络资源,涉及境外站点的需求不在它的适用范围里。





