python-3.x - Python 请求模块异常 SSLError

标签 python-3.x ssl web-scraping python-requests pycharm

当我尝试访问 http://www.acastipharma.com/ 时收到请求模块异常错误网站。我在任何其他网站上都没有遇到问题,因此我认为这是一个特定于网站的问题。这是一些示例代码

import requests
initialURL = 'http://www.acastipharma.com/'
r = requests.get(initialURL)

当我运行这段代码时,我收到一条以

结尾的错误消息
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.acastipharma.com', port=443): Max retries exceeded with url: /investors/ (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:645)'),))

互联网搜索表明问题可能出在 acastipharma 的 SSL 证书上。我尝试安装 pyopenssl 以确保我拥有检查 SSL 证书的模块的最新版本,但这并没有解决问题。我还尝试使用 verify=False 选项运行 requests.get 语句,但也没有成功。

r = requests.get(initialURL, verify=False)

如果有人对如何解决此问题有任何想法,我将不胜感激。我也尝试使用旧的 urllib.request 包,但遇到了同样的错误。

这是对我原来问题的更新:我发布的错误消息是尝试在 acastipharma 的网站子页面之一上运行请求命令,这是我运行代码时得到的完整错误消息,完全按照这个问题:

    Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/urllib3/connectionpool.py", line 601, in urlopen
    chunked=chunked)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/urllib3/connectionpool.py", line 346, in _make_request
    self._validate_conn(conn)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/urllib3/connectionpool.py", line 850, in _validate_conn
    conn.connect()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/urllib3/connection.py", line 326, in connect
    ssl_context=context)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/urllib3/util/ssl_.py", line 329, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
    _context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:645)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/adapters.py", line 440, in send
    timeout=timeout
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/urllib3/connectionpool.py", line 639, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/urllib3/util/retry.py", line 388, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.acastipharma.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:645)'),))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/sessions.py", line 508, in request
    resp = self.send(prep, **send_kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/sessions.py", line 640, in send
    history = [resp for resp in gen] if allow_redirects else []
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/sessions.py", line 640, in <listcomp>
    history = [resp for resp in gen] if allow_redirects else []
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/sessions.py", line 218, in resolve_redirects
    **adapter_kwargs
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/adapters.py", line 506, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.acastipharma.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:645)'),))

我正在使用 Python 3.5.1。我在使用 High Sierra 版本 10.13.2 的 Mac 上。我正在使用请求 2.18.4。自发布问题以来,我认为问题出在我的 IDE PyCharm 环境上。如果我使用我的 Python 3.5 环境,我会遇到这个问题中所示的问题,如果我将项目解释器切换到 Python 3.6 Anaconda 环境,请求将起作用,但不幸的是 mysql 不会导入。谢谢

最佳答案

The OpenSSL version is OpenSSL 0.9.8zh 14 Jan 2016

此(非常旧且长期不受支持的)OpenSSL 版本不支持此特定 Web 服务器所需的较新密码。此服务器仅支持 ECDHE key 交换,OpenSSL 0.9.8 尚不支持。这意味着客户端仅向服务器提供服务器不会接受的密码,并且由于没有通用密码,服务器将通过 SSL 握手警报关闭连接。

关于python-3.x - Python 请求模块异常 SSLError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52009507/

相关文章:

php - 我如何使用带 SSL 的 PHP

json - VBA解析json并循环不同的对象

c# - 如何强制 ScriptManager 通过 SSL 提供 CDN 脚本

python - 单击 "Exit"时 Tkinter 窗口没有响应

python-3.x - Python 脚本在到达 CV2 函数时卡住

python - 如何从我需要的文本中跳过或截断字符或符号。网页抓取与 BeautifulSoup

c# - SslStream 慢取决于 BufferedStream 的包装

python - 有没有办法从 SeLoger 中抓取广告的网址?

node.js - 使用 puppeteer(库)进行网页抓取时克服分页

python - 如何使用多线程执行子进程