
手把手教你用Python玩转代理IP
经常有小伙伴问我,用cURL测试好的代理IP怎么移植到Python项目里?这事儿说难不难,但新手容易踩坑。今天咱们就用最接地气的方式,掰开了揉碎了讲明白怎么把cURL代理请求转成Python代码。
看懂cURL里的代理参数
先看个典型带代理的cURL命令:
curl -x http://user:pass@proxy.ipipgo.io:8080 https://example.com
这里-x参数就是设置代理服务器的关键。注意看地址结构:协议://用户名:密码@代理地址:端口。记牢这个格式,等会儿转Python要用。
Python请求的三板斧
Python里常用的requests库处理代理其实特简单,重点是要注意代理字典的格式。咱们把上面的cURL转成代码:
import requests
proxies = {
'http': 'http://user:pass@proxy.ipipgo.io:8080',
'https': 'http://user:pass@proxy.ipipgo.io:8080'
}
response = requests.get('https://example.com', proxies=proxies)
print(response.text)
注意这里有个坑:很多人只写http代理,结果https请求失败。所以必须同时配值http和https两个协议。
实战中的防坑指南
实际用ipipgo的代理时,推荐用他们的API动态获取代理地址。举个栗子:
import requests
从ipipgo获取代理(记得替换成自己的API)
proxy_api = "https://api.ipipgo.com/getproxy?key=你的密钥"
proxy_data = requests.get(proxy_api).json()
proxies = {
'http': f"http://{proxy_data['user']}:{proxy_data['pass']}@{proxy_data['server']}",
'https': f"http://{proxy_data['user']}:{proxy_data['pass']}@{proxy_data['server']}"
}
测试代理是否生效
test_url = "https://httpbin.org/ip"
resp = requests.get(test_url, proxies=proxies)
print(f"当前IP:{resp.json()['origin']}")
这样写有个好处:每次请求都用新IP,防封效果杠杠的。ipipgo的动态住宅代理特别适合这种场景,他们家的IP池每天更新20%以上,不容易被目标网站识别。
常见问题QA
Q:代理IP总是连不上怎么办?
A:先检查三点:1. 用户名密码有没有特殊字符要转义 2. 协议头是不是写对了(http和https)3. 防火是否放行。如果还不行,建议联系ipipgo客服查代理状态。
Q:高并发时怎么管理代理池?
A:推荐用ipipgo的企业级动态代理,支持自动切换IP+会话保持。他们的TK专线可以做到每秒100+次请求不掉线,适合爬虫老鸟。
| 套餐类型 | 适用场景 | 价格优势 |
|---|---|---|
| 动态住宅(标准) | 日常数据采集 | 7.67元/GB |
| 静态住宅 | 需要固定IP的业务 | 35元/IP |
升级玩法小技巧
老司机都会用失败重试机制:当代理超时时自动更换IP重试。配合ipipgo的按量付费模式,既省成本又稳定。代码可以这么写:
from retrying import retry
@retry(stop_max_attempt_number=3)
def request_with_retry(url):
proxy = get_new_proxy() 从ipipgo获取新代理
return requests.get(url, proxies=proxy, timeout=10)
用的时候直接调用
data = request_with_retry('https://target-site.com')
记得装retrying库(pip install retrying),这样当请求失败时会自动重试3次,每次都会用新IP。
最后说个秘密:ipipgo的跨境专线代理延迟只有普通代理的1/3,做实时数据抓取特别香。不过这个要企业用户才能申请,有需要的可以直接找他们客服开白名单。

