You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 7下REST请求被拦截问题求助

排查Windows 7下Python REST请求失败的问题

刚踩过类似的坑,结合你的情况(Ubuntu正常、浏览器可访问、已开5000端口防火墙),给你几个具体的排查方向和解决办法:

1. 检查代理设置干扰

Windows系统的代理配置可能会影响Python的网络请求,而浏览器通常会自动适配代理,导致两者行为不一致。

  • 先排查Python是否继承了不必要的代理:在代码里添加以下代码打印当前代理环境变量:
    import os
    print("HTTP_PROXY:", os.environ.get('HTTP_PROXY'))
    print("HTTPS_PROXY:", os.environ.get('HTTPS_PROXY'))
    
    如果输出了非预期的代理地址,可以在代码里强制禁用代理(以requests库为例):
    import requests
    response = requests.get(your_rest_url, proxies={"http": None, "https": None})
    
    或者直接在系统环境变量中删除对应的代理配置。

2. 修正防火墙规则(针对Python进程而非仅端口)

你开放了5000端口的规则,但Windows防火墙可能是拦截了Python程序本身的网络请求,而非端口。

  • 手动添加允许Python.exe的防火墙规则:
    • 打开「控制面板 → Windows防火墙 → 高级设置」
    • 分别在「出站规则」和「入站规则」中点击「新建规则」
    • 选择「程序」→ 点击「浏览」找到你Python安装目录下的python.exe(比如C:\Python38\python.exe
    • 选择「允许连接」,然后按向导完成配置
      这样能确保Python进程的网络请求不会被防火墙拦截,比单纯开放端口更精准。

3. 强制启用TLS 1.2(Windows 7 SSL兼容性问题)

Windows 7默认的TLS版本支持有限,很多现代REST服务要求TLS 1.2或更高,但旧版本Python在Windows 7下可能默认不启用。

  • 如果使用requests库,可以通过自定义适配器强制使用TLS 1.2:
    import requests
    from requests.adapters import HTTPAdapter
    from urllib3.poolmanager import PoolManager
    import ssl
    
    class TLS12Adapter(HTTPAdapter):
        def init_poolmanager(self, connections, maxsize, block=False):
            self.poolmanager = PoolManager(
                num_pools=connections,
                maxsize=maxsize,
                block=block,
                ssl_version=ssl.PROTOCOL_TLSv1_2
            )
    
    # 创建会话并挂载适配器
    session = requests.Session()
    session.mount('https://', TLS12Adapter())
    session.mount('http://', TLS12Adapter())
    
    # 发起请求
    try:
        response = session.get(your_rest_url)
        response.raise_for_status()
        print(response.text)
    except Exception as e:
        print(f"请求失败: {str(e)}")
    
    这个方法能解决大部分因SSL版本不兼容导致的请求失败问题。

4. 检查Python版本与杀毒软件

  • Windows 7最高支持Python 3.8,如果你用的是更老的版本(比如Python 2.7或3.6之前),可能存在网络模块的兼容性问题,尝试升级到Python 3.8试试。
  • 临时关闭杀毒软件或安全工具:有些杀毒软件会默认拦截未知程序的出站请求,关闭后测试是否能正常发起请求,确认后再给Python添加信任规则。

5. 验证URL与请求细节

虽然浏览器能访问,但可以再确认下代码中的URL是否有拼写错误,或者是否需要添加请求头(比如User-Agent)模拟浏览器请求:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(your_rest_url, headers=headers, proxies={"http": None, "https": None})

内容的提问来源于stack exchange,提问作者Santi Peñate-Vera

火山引擎 最新活动