【问题标题】:SSL Error on Python GET RequestPython GET 请求上的 SSL 错误
【发布时间】:2014-09-17 17:13:59
【问题描述】:

我正在尝试对这个 url 做一个简单的 GET 请求:link

这是我已经用于其他网址和作品的基本 python 代码。

url = 'http://www.bbvafrances.com.ar/francesGo2-Portal/institucional/busqueda.do?m=&page=1'
r = requests.get(url)
print r.text

问题是使用这个特定的 url 我得到一个 SSL 错误:

Traceback (most recent call last):
  File "frances.py", line 134, in <module>
    r = requests.get(url,verify=False)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 335, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 454, in send
    history = [resp for resp in gen] if allow_redirects else []
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 144, in   resolve_redirects
    allow_redirects=False,
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 438, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 331, in send
raise SSLError(e)
 requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:1408F119:SSL     routines:SSL3_GET_RECORD:decryption failed or bad record mac

关于这个导致请求崩溃的特定 url 发生了什么的任何想法? 我尝试添加自定义标题但仍然没有运气。

提前致谢。

编辑:现在我正在尝试使用建议的这种 SSL 方式作为答案。

url = 'https://www.bbvafrances.com.ar/francesGo2-Portal/institucional/busqueda.do?m=&page=1'
s = requests.Session()
s.mount(url, SSLAdapter(ssl.PROTOCOL_SSLv3))
r = s.get(url)
print r.text

这是新的痕迹:(几乎与第一个相同)

Traceback (most recent call last):
  File "frances.py", line 138, in <module>
    r = s.get(url)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 463, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 451, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 557, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 420, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:1408F119:SSL         routines:SSL3_GET_RECORD:decryption failed or bad record mac

【问题讨论】:

  • FWIW,我可以重现您的问题,并且可以确认这不会在其他 HTTPS 站点上发生

标签: python ssl get python-requests


【解决方案1】:

问题是,服务器宣布支持 TLS1.0,但如果你真的尝试使用 TLS1.0 与它通信,它就会中断。相反,您必须使用 SSL3。

您可以通过使用requests_toolbelt 包中包含的SSLAdapter 来做到这一点: http://toolbelt.readthedocs.org/en/latest/user.html#ssladapter.

然后使用ssl.PROTOCOL_SSLv3 而不是文档中显示的那个。

【讨论】:

  • 关于 requests_toolbelt 包的非常酷的答案,但遗憾的是我仍然收到同样的错误:requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:1408F119:SSL routines:SSL3_GET_RECORD :decryption failed or bad record mac
  • 顺便说一句,调用参数的正确方法是 ssl.PROTOCOL_SSLv3
  • 我更正了类型。您确定您使用包含新适配器的会话发出请求吗?您是否为所有https:// 安装了适配器?
  • 查看编辑...这是我的全部代码。只有一个请求,这就是中断的请求。
猜你喜欢
  • 1970-01-01
  • 2018-11-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
相关资源
最近更新 更多