Python: ошибка в self._sslobj.do_handshake () при открытии ссылки в механизации - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь повторно запустить код, который я написал около 2 лет назад, но сейчас он не работает.Я использую Python 3.7.1.Ниже приведен фрагмент кода, вызывающий проблему:

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>

Не могли бы вы объяснить, в чем проблема на самом деле и как ее решить?

Примечание- Пожалуйста Посетите страницуссылка , которую я открываю и проверяю, она использует, вероятно, устаревшие шифры и всегда показывает предупреждение, прежде чем продолжить.

1 Ответ

0 голосов
/ 13 июня 2019

Хотя не совсем понятно, какую версию OpenSSL вы используете вместе с Python, я предполагаю, что это OpenSSL 1.1.1, поскольку она поставляется с Anaconda Python 3.7. Эта версия больше не поддерживает DES-CBC3-SHA, т. Е. Этот шифр считается слабым и не скомпилирован. Поэтому ssl._DEFAULT_CIPHERS = ('DES-CBC3-SHA'), по существу, устанавливает в списке поддерживаемых шифров ни один, что приводит к сбою рукопожатия TLS.

Если вам нужен этот слабый шифр, вам нужно вернуться к более старой версии OpenSSL или перекомпилировать OpenSSL и Python с явно включенной поддержкой этого слабого шифра.

...