首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >代理IP接入程序的完整流程(Python 实战,附排坑记录)

代理IP接入程序的完整流程(Python 实战,附排坑记录)

原创
作者头像
三三有猫
发布2026-07-06 15:09:13
发布2026-07-06 15:09:13
50
举报

最近项目里需要用到代理IP,从选型到跑通代码踩了一些坑,把整个过程记录一下,希望对同样在做这块的朋友有帮助。

我用的是极安代理,它有短效代理和隧道代理两种产品。下面的操作和代码都基于这个环境,但原理部分是通用的,换别的服务商逻辑一样。

一、先搞清楚短效代理和隧道代理的区别

这两种代理的工作方式完全不同,选错了后面的接入方式也不一样,所以放在最前面说。

短效代理(有的平台叫提取式代理、API代理):你调一个接口,它返回一批IP给你,每个IP有存活时间,过期作废,你得重新提取。相当于你自己管一个IP池。

隧道代理(有的平台叫旋转代理):给你一个固定的代理地址,你所有请求都往这个地址发,后端自动帮你换IP。你不用关心IP的事。

简单对比:

短效代理

隧道代理

你拿到什么

一条API链接,调用返回IP列表

一个固定的 host:port 地址

IP怎么换

自己管,过期了重新提取

自动换,你不用管

代码量

多一些,要写IP池逻辑

少,配一次地址就行

适合什么场景

需要大量不同IP

要稳定通道、怕麻烦

我的场景需要大量不同IP,所以两种都试了。

二、获取代理地址

这一步很简单。

短效代理:到极安代理的提取工具页面,选好地区、协议、数量,页面生成一条API链接,复制就行。也可以看接口文档自己拼参数,灵活度更高。

​​

隧道代理:购买后进后台,产品列表里直接有隧道地址,复制走。

三、配置授权验证

地址拿到了还不能直接用,需要先做身份验证。支持两种方式:

1. 白名单

把你服务器的公网出口IP加到后台的白名单里,之后这个IP过来的请求自动放行,代码里不用带任何认证参数。

优点是代码干净,缺点是你的出口IP得固定。云服务器一般没问题,本地开发就不一定了。

2. 账密

在后台找到 AuthkeyAuthpwd,请求时按 Authkey:Authpwd@代理地址 格式传入。

不要求固定IP,本地调试也能用。

两种选一个就行。我在服务器上用白名单,本地调试用账密。

四、curl 测试

写代码之前一定先用 curl 验一下,否则出了问题不知道是代理的事还是代码的事。

隧道代理测试:

代码语言:javascript
复制
# 账密方式
curl -x http://你的Authkey:你的Authpwd@隧道地址 https://httpbin.org/ip
​
# 白名单方式
curl -x http://隧道地址 https://httpbin.org/ip

短效代理测试(需要先提取IP再测):

代码语言:javascript
复制
# 先提取
curl "你的短效代理API链接"
# 返回类似:180.XX.XX.1:端口
​
# 再用提取到的IP测试
curl -x http://180.XX.XX.1:端口 https://httpbin.org/ip

返回的 JSON 里 IP 和你本机不一样,就说明代理通了。

五、Python 代码集成

curl 通了,代码就好写了。

隧道代理

代码语言:javascript
复制
import requests
​
proxy = "http://你的Authkey:你的Authpwd@隧道地址"
proxies = {"http": proxy, "https": proxy}
​
resp = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print(resp.json())
# 每次请求自动换IP,不需要额外处理

短效代理

代码语言:javascript
复制
import requests
​
# 调API提取可用IP
api_url = "你的短效代理API链接"
ip_list = requests.get(api_url).text.strip().split("\n")
​
# 逐个使用
for ip in ip_list:
    proxies = {"http": f"http://{ip}", "https": f"http://{ip}"}
    try:
        resp = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=5)
        print(f"{ip} -> {resp.json()}")
    except Exception as e:
        print(f"{ip} 失败: {e}")

生产环境建议: 短效代理的IP有存活时间,不要一次提取太多囤着。我的做法是每隔几分钟提取一批,维护一个本地IP队列,用完即弃。

其他语言参考

逻辑一样,写法不同:

  • Node.js:用 http-proxy-agenthttps-proxy-agent
  • Go:在 http.TransportProxy 字段设置
  • Java:用 java.net.ProxyHttpClient 配置

核心都是把代理地址告诉 HTTP 客户端。

六、踩坑记录

记几个我实际遇到的问题,希望能帮别人少走弯路。

坑1:curl 能通,代码里死活不行

查了半天发现是代码里代理地址少写了 http:// 前缀。requests 库不会自动补协议头,少了就直接报错。另外如果 Authkey 或 Authpwd 里有 @: 这种特殊字符,必须做 URL 编码:

代码语言:javascript
复制
from urllib.parse import quote
​
authkey = quote("your@key", safe="")
authpwd = quote("your:pwd", safe="")
proxy = f"http://{authkey}:{authpwd}@隧道地址"

坑2:HTTP 正常,HTTPS 直接断连

一开始以为是代码的问题,结果是套餐只支持 HTTP 转发。换了支持 HTTPS 的套餐就好了。这个问题没有报错信息,直接 timeout,很容易往错误方向排查。

坑3:白名单加了还是 403

两个原因:一是刚加的白名单有一两分钟的延迟,等一下就好了;二是我加错了IP——加的是 ifconfig 看到的内网IP,实际出口IP不是这个。用这个命令查真实出口:

代码语言:javascript
复制
curl https://httpbin.org/ip

坑4:并发一高就大面积失败

套餐有并发上限,超了就被限流。我的解决方案是加了一个信号量控制并发数:

代码语言:javascript
复制
import asyncio
import aiohttp
​
semaphore = asyncio.Semaphore(10)  # 根据套餐并发数设置
​
async def fetch(url, proxy):
    async with semaphore:
        async with aiohttp.ClientSession() as session:
            async with session.get(url, proxy=proxy, timeout=aiohttp.ClientTimeout(total=10)) as resp:
                return await resp.json()

坑5:短效代理提取出来一堆不能用

正常的。IP有存活窗口,从提取到你用的这段时间里,有些已经过期了。不要纠结可用率,直接在代码里加异常处理 + 自动换下一个IP就行。

总结

整个流程跑通之后其实很简单,就是拿地址→配授权→测试→写代码,四步。关键是测试那一步别省,先用 curl 确认代理本身没问题,再去写业务代码,能省很多排查时间。

以上就是在极安代理环境下的完整接入过程,有问题欢迎评论区交流。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、先搞清楚短效代理和隧道代理的区别
  • 二、获取代理地址
  • 三、配置授权验证
    • 1. 白名单
    • 2. 账密
  • 四、curl 测试
  • 五、Python 代码集成
    • 隧道代理
    • 短效代理
    • 其他语言参考
  • 六、踩坑记录
    • 坑1:curl 能通,代码里死活不行
    • 坑2:HTTP 正常,HTTPS 直接断连
    • 坑3:白名单加了还是 403
    • 坑4:并发一高就大面积失败
    • 坑5:短效代理提取出来一堆不能用
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档