You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用requests开发爬虫设置代理时HTTPS代理失效问题咨询

问题解答

一、HTTPS代理失效的原因及代码问题

你的代码核心问题是对requests库的代理配置规则理解有误,具体问题如下:

  • 代理字典的key匹配逻辑错误:requests的代理字典中,key代表你要访问的目标站点的协议,而非代理本身支持的协议。你测试的所有站点都是HTTPS协议,requests只会读取代理字典中key为https对应的配置,你当前代码中如果代理的第一个协议是http,生成的代理字典只有http key,访问HTTPS站点时不会生效。
  • 代理地址前缀配置错误:大多数支持HTTPS转发的代理是通过HTTP CONNECT隧道实现的,代理地址前缀写http://即可,不需要写https://,如果强行写https://前缀,会要求和代理本身建立HTTPS连接,绝大多数免费代理不支持该逻辑,直接报错。
  • 协议读取逻辑不全:你只读取了代理支持的第一个协议proxy['protocols'][0],很多同时支持HTTP、HTTPS的代理只配置了单协议,无法适配HTTPS请求场景。

二、常见代理配置格式疑问解答

1. 为什么代理字典中https对应的地址前缀是http?

绝大多数支持HTTPS转发的代理都基于HTTP CONNECT隧道实现,你和代理之间本身走HTTP协议通信,代理只负责转发你加密后的HTTPS流量,不会接触到你的请求明文,所以代理地址前缀写http://完全可以正常代理HTTPS请求,不需要加https://前缀。

2. 可以仅传递单条代理吗?

可以,如果你只有特定协议的请求需要走代理,只配置对应key即可。比如你所有请求都是HTTP协议,只传{"http": "http://代理IP:端口"}就可以正常使用。

3. 可以在代理字典中传入10个不同的IP地址吗?

不行,requests原生不支持代理自动切换、负载均衡逻辑,一个协议key只能对应一个代理地址。如果你需要使用多个代理,需要自己在代码层面实现代理池逻辑,每次发请求前从可用代理列表中随机选取一个,构造对应的代理字典传入请求参数即可。

修正后的代理构造代码示例

final_proxy_list = []
for proxy in full_proxy_list:
    ip_ = proxy['ip']
    port = proxy['port']
    support_protocols = proxy['protocols']
    proxy_dict = {}
    # 同时适配HTTP和HTTPS请求的代理配置
    if 'http' in support_protocols or 'https' in support_protocols:
        proxy_dict['http'] = f'http://{ip_}:{port}'
        proxy_dict['https'] = f'http://{ip_}:{port}'
    elif 'socks4' in support_protocols:
        proxy_dict['http'] = f'socks4://{ip_}:{port}'
        proxy_dict['https'] = f'socks4://{ip_}:{port}'
    elif 'socks5' in support_protocols:
        proxy_dict['http'] = f'socks5://{ip_}:{port}'
        proxy_dict['https'] = f'socks5://{ip_}:{port}'
    if proxy_dict:
        final_proxy_list.append(proxy_dict)

内容的提问来源于stack exchange,提问作者taga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:39:03