先把"http代理ip"这件事拆开看
很多人在搜"http代理ip怎么做"的时候,脑子里其实混着三件完全不同的事:写一个代理服务端、给代理加权限控制、以及搞到一批可以换着用的出口IP。这三件事难度差得很远,混在一起想就容易卡住。
代理本身不神秘,它就是一个"中转站"。你的程序把请求丢给它,它替你出门把东西取回来,再原样递给你。所以一个能用的代理,必须同时具备三样东西:
服务端——谁来监听端口、接住请求;鉴权——凭什么判断"你有权用";出口IP——拿着谁的身份去访问目标。前两样是你自己动手能搞定的,第三样才是真正考验资源的地方,后面会单独讲。
动手前先确认一下协议,选错了后面全白搭:
| 协议 | 典型端口 | 能处理什么 | 适合谁 |
|---|---|---|---|
| HTTP 代理 | 3128 / 8080 | 普通网页请求,HTTPS 走隧道 | 大部分采集脚本、通用工具 |
| HTTPS 代理 | 443 / 8080 | 需要加密握手到代理本身 | 对传输链路有要求的场景 |
| SOCKS5 | 1080 | TCP/UDP 全走,协议无关 | 非 HTTP 类客户端、复杂工具 |
日常做数据采集、接口调试,HTTP 代理就够用,配置也最简单。下面就从它开始动手。
半小时搭一个能跑通的HTTP代理
服务端软件不用自己写,现成的开源件足够。Linux 上最常见的是 Squid,装上就有默认配置,改几行就能用。
# 安装
sudo apt update && sudo apt install squid -y
# 改配置前先备份,这步别省
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
接着编辑 /etc/squid/squid.conf,把关键几行改成你自己的。默认配置里有一大段注释,直接在最上面追加更省事:
# 监听端口,对外提供服务就写 0.0.0.0
http_port 3128
# 只放行办公室这个网段,别一上来就 allow all
acl office_lan src 192.168.1.0/24
http_access allow office_lan
http_access deny all
# 指定解析服务,省得解析超时
dns_nameservers 223.5.5.5
保存后重启:sudo systemctl restart squid,再看一眼端口有没有真的监听起来:ss -lntp | grep 3128。有输出就说明服务端活了。
验证这一步很多人跳过,结果后面出问题根本分不清是代理坏了还是程序写错了。用 curl 打一发最快:
curl -x http://192.168.1.10:3128 http://example.com
能拿回页面内容,说明链路通了。如果卡住不动,九成是防火墙没放行,或者你在云服务器上忘了开安全组规则——安全组这件事每年都要坑掉一批人。
鉴权配置:别让代理变成公共跳板
一个不带任何鉴权、又监听了 0.0.0.0 的代理端口,放到公网上通常撑不过几个小时。扫描器天天在跑全端口,一旦被收录进公开代理列表,你的带宽就会被陌生流量吃满,还可能因为别人的请求行为牵连到你自己的机器。
所以鉴权不是"高级功能",是必须项。常见三种做法,按场景挑:
第一种,IP 白名单。最简单,也最省心。只允许固定几台服务器的来源地址访问,其他一律拒绝。上面配置里的 acl office_lan src 就是干这个的。缺点是机器一换、IP 一变就得改配置,不适合动态环境。
第二种,账号密码。通用性最好,几乎所有客户端和编程语言都支持。Squid 配置 Basic 认证大概是这样:
# 生成密码文件
sudo htpasswd -c /etc/squid/passwd collector
# squid.conf 中加入
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm proxy
auth_param basic credentialsttl 2 hours
acl authed proxy_auth REQUIRED
http_access allow authed
http_access deny all
改完记得 sudo systemctl reload squid。这时候再用 curl,不带账号就会直接返回 407,带上了才通:
curl -x http://collector:你的密码@192.168.1.10:3128 http://example.com
第三种,令牌校验。在请求头里带一个自定义字段,由网关层去校验。灵活度高,但对客户端改造有要求,适合内部系统之间流转。
不管用哪种,都建议再加两条保险:禁止代理访问本机内网地址,避免被人拿去做内网探测;加上访问日志,出问题能倒查是哪台机器在跑量。密码也要定期换,别一个密码从测试环境用到生产。
把代理接进代码:三行就能跑
服务端和鉴权都就位了,最后一公里是把代理塞进你的程序。Python 里最省事的写法就是拼一个带凭证的代理地址:
import requests
proxies = {
"http": "http://collector:你的密码@192.168.1.10:3128",
"https": "http://collector:你的密码@192.168.1.10:3128",
}
resp = requests.get("http://example.com", proxies=proxies, timeout=15)
print(resp.status_code)
注意 https 那一项填的仍然是 http:// 开头的地址,这是新手最容易写错的地方——它指的是"用 HTTP 代理去访问 HTTPS 站点",不是代理本身用了 HTTPS 协议。
还有个小习惯值得养成:把超时时间写死,别用默认值。代理链路比直连多一跳,遇到网络抖动时没有超时会一直挂着,整个任务队列就堵在那儿了。
自建代理的天花板,很快就摸到了
单机代理跑通只是起点。真拿去跑采集,你会陆续撞上几堵墙:
一是IP 资源太单薄。一台服务器通常就一个出口地址,稍微有点量的站点,几万次请求之后这个地址就开始被限速、弹验证。你换不了,因为你手里只有这一个。
二是地址属性不对。很多平台会区分机房地址和家庭宽带地址,机房里出来的请求天生更容易被拦。这类判断跟你代理写得多漂亮没关系,纯粹是地址属性问题。
三是运维成本被低估。机器要盯、端口要被扫、证书到期要续、并发一高还得做负载。本来是想省事,结果养了一堆运维活。
所以业内的常规做法是:代理这套东西该会,但不必什么都自己扛。批量采集、AI 大模型训练语料抓取、市场研究这类需要持续换地址、量又大的活,交给专业服务更划算。
神龙HTTP 在这块比较对口。它有 3000 万+正规授权代理 IP 储备,国内三大运营商正规授权,覆盖 300+ 城市,可以做到城市级精准定位——需要特定地区的出口时,直接指定城市就能取到。可用率标称 99.9%,IP 纯度 99.8%,短效动态、长效静态、固定 IP 三条产品线都能一站式拿到,协议上 HTTP、HTTPS、SOCKS5 全支持。
接入方式也很轻。API 提取接口兼容主流爬虫编程语言,官方给了文档和示例代码,基本就是把上面那段 proxies 里的地址换成提取到的 IP 和端口:
import requests
# 从接口提取到一组 ip:port,取其中一条
proxy_host, proxy_port = "提取到的IP", "提取到的端口"
proxy_url = f"http://账号:密码@{proxy_host}:{proxy_port}"
proxies = {"http": proxy_url, "https": proxy_url}
resp = requests.get("http://example.com", proxies=proxies, timeout=15)
print(resp.status_code)
个人中心里有可视化的用量统计和实时监控,哪个时段提取量飙升、哪种请求失败率高,看一眼就知道,排查异常比翻日志快得多。技术团队 7×24 小时在线,半夜跑批出问题也有人接。
上线前对照一遍这份清单
从能跑到能扛,中间差的就是这些细节。正式投入之前,按下面几张表过一遍:
| 检查项 | 怎么确认 | 不合格的后果 |
|---|---|---|
| 监听范围 | 确认是否误开 0.0.0.0 | 暴露在公网被扫到 |
| 鉴权开关 | 不带凭证请求应返回 407 | 带宽被陌生流量吃满 |
| 内网访问 | 禁止代理转发到内网段 | 被当作内网探测跳板 |
| 超时设置 | 客户端统一设置 10-15 秒 | 任务队列整体卡死 |
| 日志留存 | 记录来源、目标、状态码 | 故障无法倒查 |
| 并发上限 | 压测后设定合理池大小 | 连接被打满频繁失败 |
另外提一句,短效代理的 IP 存活周期往往只有几分钟。代码里必须当作"随时会失效"来处理:请求失败先重试一次,还是不行就丢掉这条,去池子里换一条新的。把这个重试逻辑写扎实,比换什么服务商都管用。
常见问题
Q:自己搭的代理,为什么用了没多久就基本不通了?
先看是不是单出口地址被目标站点限速了,这种情况代理服务本身没坏,是出口身份被盯上。再检查鉴权有没有被绕过、机器带宽有没有被别人占满。如果是长期采集,靠换一台机器解决不了多久,本质上还是 IP 储备不够,得从出口资源一侧解决。
Q:程序一直报 407,是哪里配错了?
407 表示"需要代理身份认证",说明请求确实到了代理,只是凭证没被接受。依次核对三处:账号密码里有没有特殊字符需要转义、密码文件是否在重载后生效、客户端有没有真的把凭证带上。用 curl 命令行先试一遍,能通再排代码,速度最快。
Q:HTTP 代理能访问 HTTPS 网站吗?
可以。客户端会先向代理发起 CONNECT 建立一条隧道,之后的数据在隧道里走,代理只看得到目标地址和端口,看不到具体内容。所以配置里 https 那一项依然填 http:// 开头的代理地址,这是正常写法。
Q:采集量涨上去了,是继续加机器还是换方案?
算一笔账:加机器意味着持续的带宽费、运维时间和地址被封后的反复折腾,而且机房地址的属性问题加钱也解决不了。当月请求量稳定在几十万以上、又需要多地区出口时,直接用商业代理通常更省。神龙HTTP 支持高并发与大规模采集需求,提取接口按需取,用完即弃,不用自己养机器。






