【问题标题】:Python: Error in self._sslobj.do_handshake() during opening a link in mechanizePython:在机械化中打开链接时 self._sslobj.do_handshake() 出错
【发布时间】:2019-06-13 19:15:03
【问题描述】:

我正在尝试重新运行大约 2 年前编写的代码,但现在它无法正常工作。我正在使用 python 3.7.1。 导致问题的代码sn-p如下

import ssl
import mechanize
import operator

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context


ssl._DEFAULT_CIPHERS = ('DES-CBC3-SHA')
myBrowser = mechanize.Browser()
myBrowser.set_handle_robots(False)
myBrowser.set_handle_refresh(False)

myBrowser.open("https://uwp.puchd.ac.in/common/viewmarks.aspx")

这会在 ssl 握手期间导致异常并且仅显示 [错误 0]。完整的追溯如下-

Traceback (most recent call last):
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_urllib2_fork.py", line 1179, in do_open
    headers)
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 1229, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 1275, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 1224, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 1016, in _send_output
    self.send(msg)
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 956, in send
    self.connect()
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 1392, in connect
    server_hostname=server_hostname)
  File "/home/him/anaconda3/lib/python3.7/ssl.py", line 412, in wrap_socket
    session=session
  File "/home/him/anaconda3/lib/python3.7/ssl.py", line 853, in _create
    self.do_handshake()
  File "/home/him/anaconda3/lib/python3.7/ssl.py", line 1117, in do_handshake
    self._sslobj.do_handshake()
OSError: [Errno 0] Error

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "UIET Rank system.py", line 51, in <module>
    myBrowser.open("https://uwp.puchd.ac.in/common/viewmarks.aspx")
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_mechanize.py", line 253, in open
    return self._mech_open(url_or_request, data, timeout=timeout)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_mechanize.py", line 283, in _mech_open
    response = UserAgentBase.open(self, request, data)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_opener.py", line 193, in open
    response = urlopen(self, req, data)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_urllib2_fork.py", line 375, in _open
    '_open', req)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_urllib2_fork.py", line 363, in _call_chain
    result = func(*args)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_urllib2_fork.py", line 1225, in https_open
    return self.do_open(conn_factory, req)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_urllib2_fork.py", line 1182, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 0] Error>

能否请您解释一下实际上是什么问题以及如何解决?

注意-Visit this link,我正在打开并检查它,它可能使用过时的密码,并且在继续之前总是显示警告。

【问题讨论】:

    标签: python ssl mechanize


    【解决方案1】:

    虽然尚不完全清楚您将哪个版本的 OpenSSL 与 Python 一起使用,但我的猜测是它是 OpenSSL 1.1.1,因为它是随 Anaconda Python 3.7 一起提供的。此版本不再支持 DES-CBC3-SHA,即此密码被认为是弱密码且未编译。这就是为什么 ssl._DEFAULT_CIPHERS = ('DES-CBC3-SHA') 本质上将支持的密码列表设置为 none,这会导致 TLS 握手失败。

    如果您需要这种弱密码而不是需要返回旧版本的 OpenSSL 或重新编译 OpenSSL 和 Python,并显式启用对这种弱密码的支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      相关资源
      最近更新 更多