使用requests.get设置代理IP无效,请求爬虫工程师协助解决
解决requests设置代理后仍显示本机IP的问题
以下是排查和解决的核心要点:
- 检查代理格式正确性:
proxies字典的键必须包含协议(http/https),代理地址也需带完整协议前缀。示例:
注意:HTTPS请求必须对应proxies = { "http": "http://192.168.1.1:8080", "https": "http://192.168.1.1:8080" }https键的代理配置,否则requests会忽略代理直接使用本机IP。 - 验证代理可用性:先通过命令行或其他工具确认代理能正常转发请求,比如执行:
若返回的不是代理IP,说明代理本身失效或被封禁,需更换有效代理。curl -x http://192.168.1.1:8080 https://httpbin.org/ip - 排除全局代理干扰:系统环境变量(如
HTTP_PROXY/HTTPS_PROXY)的全局代理会优先生效,可在请求中临时禁用后再设置自定义代理:import os os.environ.pop('HTTP_PROXY', None) os.environ.pop('HTTPS_PROXY', None) response = requests.get("https://httpbin.org/ip", proxies=proxies) - 处理带认证的代理:若代理需用户名密码,需按
http://username:password@ip:port格式配置:proxies = { "http": "http://user123:pass456@192.168.1.1:8080", "https": "http://user123:pass456@192.168.1.1:8080" } - 会话对象的代理绑定:若使用
requests.Session(),需将代理绑定到会话实例,而非仅单个请求:session = requests.Session() session.proxies.update(proxies) response = session.get("https://httpbin.org/ip")
测试时推荐使用https://httpbin.org/ip接口,它会直接返回当前请求的源IP,便于快速验证代理是否生效。
内容的提问来源于stack exchange,提问作者Sethli
相关产品推荐
相关产品推荐

