【问题标题】:Python Requests SSL issuePython 请求 SSL 问题
【发布时间】:2013-01-18 00:27:27
【问题描述】:

自从我开始为此寻找解决方案以来已经有好几天了。

我一直在尝试使用请求通过代理发出 https 请求,但没有成功。

尽管这包含在我的一个更大的项目中,但这一切都归结为:

    import requests

    prox = 'xxx.xxx.xxx.xxx:xxx' # fill in valid proxy

    r = requests.get('https://ipdb.at', proxies={'http': prox,
                                                 'https': prox})

我尝试了 kward verify=False 但我不断收到相同的错误或它的变体:

    Traceback (most recent call last):
      File "/Users/mg/Desktop/proxy_service.py", line 21, in <module>
        verify=False)
      File "/Library/Python/2.7/site-packages/requests/api.py", line 55, in get
        return request('get', url, **kwargs)
      File "/Library/Python/2.7/site-packages/requests/api.py", line 44, in request
        return session.request(method=method, url=url, **kwargs)
      File "/Library/Python/2.7/site-packages/requests/sessions.py", line 279, in request
        resp = self.send(prep, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies)
      File "/Library/Python/2.7/site-packages/requests/sessions.py", line 374, in send
        r = adapter.send(request, **kwargs)
      File "/Library/Python/2.7/site-packages/requests/adapters.py", line 213, in send
        raise SSLError(e)
    requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
    [Finished in 20.4s with exit code 1]

我正在为 python 使用最新版本的 requests 和 openssl 和 2.7.3。我在 mac mountain lion 10.8.2 和 Windows 7 上对其进行了测试。

我用谷歌搜索了这个,看到其他人有类似的问题。我在库请求和 urllib3 上找到了相关的拉取请求,还看到了有关这是 http 连接动词的错误实现的信息。我找到了一个使用自定义适配器的修复程序(我不记得确切,但我认为这是正确的术语)来使用自定义 ssl 协议。都试过了,都没有用。

所以,我正在寻找更多信息。你知道发生了什么吗,我可以修复它,等等,等等......

欢迎所有帮助,谢谢大家!

PS:我尝试了几个代理,我确定它们不是问题。

【问题讨论】:

标签: python ssl connect python-requests


【解决方案1】:

我遇到了同样的问题,但是在尝试使用 oauth2client(用于针对其 API 使用 oauth2 的 Google 库)时。经过一天的折腾(“实验”),我发现我的 env 变量设置如下:

https_proxy=https://your-proxy:port

改成

https_proxy=http://your-proxy:port

为我彻底解决了这个问题。大概这意味着从客户端到代理的初始握手现在是未加密的,但此后 https 必须直接流动。我不相信我的公司代理配置为使用 https。

但是请注意,我的浏览器在之前的设置下都表现良好。也许他们在使用 https 失败后默默地尝试通过 http 建立代理连接。

谷歌搜索显示了将 https_proxy 设置为同等程度的 http 或 https 地址的示例。我想这取决于代理的配置方式。

浏览器/操作系统配置弹出窗口中的“用于所有协议”按钮很容易意外使用我的设置。

但是我不确定这是否是您的问题。您的代码表明您已经为 http 和 https 使用完全相同的代理设置。

顺便说一句,这一切都在 Ubuntu 12.04.1 上。

【讨论】:

  • 请停止发帖和删除。您应该能够看到已删除的帖子,因此请对其进行编辑然后取消删除。
  • 这对我有用。我不知道这是否可以扩展到任何类型的 https 协议代理,但如果是这样,请求库应该能够自行检测和纠正这个问题
【解决方案2】:

这里的答案对我有用 using requests with TLS doesn't give SNI support

我安装了三个依赖库,并在第二个答案中包含了猴子补丁提示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2019-08-16
    • 2019-10-05
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多