Python中使用requests测试代理IP失败,如何排查和解决?
ips.csv 是已经保存了形如 118.31.220.3:8080 的 IP 列表
用 requests 测试代理 IP 是否可用输出总是把原 IP 列表又输出了一遍!真心求助!
IPpools = []
with open(‘ips.csv’, ‘r’) as csvfile:
reader = csv.reader(csvfile)
testip = [row[1] for row in reader]
for rows in testip:
proxy = ‘http://’+rows
proxies = {“http”: proxy}
try:
html = requests.get(‘https://www.baidu.com’, proxies=proxies)
if html.status_code == 200:
IPpools.append(proxy)
except Exception as e:
continue
print(IPpools)
Python中使用requests测试代理IP失败,如何排查和解决?
proxy = ‘http://’+rows -> proxy = ‘https://’+rows
遇到代理IP测试失败,先别急着换代理,按这个顺序排查:
1. 基础检查
import requests
proxy = {
'http': 'http://username:password@ip:port',
'https': 'https://username:password@ip:port'
}
# 测试连接
try:
resp = requests.get('http://httpbin.org/ip',
proxies=proxy,
timeout=10)
print(f"代理IP: {resp.json()['origin']}")
except Exception as e:
print(f"连接失败: {type(e).__name__}: {e}")
2. 常见问题排查点
- 代理格式:确保是
http://或https://开头,有密码时格式要对 - 超时设置:代理响应慢就加
timeout参数 - SSL验证:HTTPS代理可能需要
verify=False(仅测试用) - 本地代理冲突:检查系统代理设置是否干扰
3. 完整测试脚本
import requests
from requests.exceptions import ProxyError, ConnectTimeout
def test_proxy(proxy_url, test_url='http://httpbin.org/ip'):
proxies = {
'http': proxy_url,
'https': proxy_url.replace('http://', 'https://')
if proxy_url.startswith('http://')
else proxy_url
}
try:
resp = requests.get(test_url,
proxies=proxies,
timeout=15,
verify=False)
if resp.status_code == 200:
actual_ip = resp.json().get('origin', '未知')
return True, f"成功!当前IP: {actual_ip}"
else:
return False, f"HTTP {resp.status_code}"
except ProxyError:
return False, "代理服务器拒绝连接"
except ConnectTimeout:
return False, "连接超时"
except Exception as e:
return False, f"其他错误: {type(e).__name__}"
# 使用示例
result, msg = test_proxy('http://user:pass@192.168.1.100:8080')
print(msg)
4. 快速诊断
如果上面的脚本能连httpbin.org但连不了你的目标站,那就是:
- 目标站封了这个代理IP
- 需要加请求头(如
User-Agent) - 代理不支持HTTPS网站
一句话建议:先确保代理本身能通,再检查目标站是否屏蔽。
你想表达什么?“原 IP 列表”指的是什么?
请求百度用的 https,proxies = {“http”: proxy} 代理 http,当然不匹配
你的 proxies 配置也有问题
http://docs.python-requests.org/en/master/user/advanced/#proxies
我的 ip 的列表有 https 和 http,一般怎么处理好?
我的 ip 的列表有 https 和 http,一般怎么处理好?
你的 csv 是怎样的?发来看看。
#7 你 5 楼的问题,在 4 楼给出的链接里有答案
就是看过了还不知道怎么解决 才来问的。
直接 proxy=(“all”:row) 换成大括号
#10
4 楼的链接,点进去以后锚点直接定位在这里,结合 3 楼说的思考一下

row 加一下 http 或者 https 协议头
不用管 csv 是怎么样的,我设置读到 python 里就是个数组,就是解决 requests 代理从数组中读取地址,和 https 的问题
http://i4.bvimg.com/653190/d2ca3f32af5b6288.jpg
http://i4.bvimg.com/653190/67387ae897763b8d.jpg
你 csv 里面都没记录代理服务器是 http 还是 https,那没办法处理啊?
我有办法爬到,只是现在没爬
我有办法爬到,只是现在没爬
那你爬的时候把完整 URL 写进 csv 就好了。
骑了一圈儿车回来,楼主是还没找到方法嘛?
试试把 proxies = {“http”: proxy}
改成 proxies = {“http”: proxy, “https”:proxy,} 会怎样 🙄
没错,是要这样子的,我之前单用 http 或 https 也没用,后来改成两都配,就 OK 了
谢谢,已经找到了,只是没回复,我直接用的 proxies = {“all”: proxy} 不知道有没有问题


