У меня очень специфическая проблема.
В частности, я хотел бы получить содержимое следующего веб-сайта: https://www.mycardtamoil.it/
Как я понял, у этого сайта есть некоторые проблемы с сертификатом SSL. Если вы откроете его в Chrome, у вас не возникнет проблем, но если вы попытаетесь извлечь контент через cURL (curl https://www.mycardtamoil.it/
), вы получите сообщение об ошибке на ssl, которое можно обойти, используя параметр -k
Когда я перехожу на Python3, я не могу обойти эту проблему; код, который я тестировал:
----------------------------------------------- ---------------------------- SysCallError Traceback (последний вызов
прошлой)
C: \ ProgramData \ Anaconda3 \ Lib \ сайт-пакеты \ urllib3 \ вно \ pyopenssl.py
в wrap_socket (self, sock, server_side, do_handshake_on_connect,
suppress_ragged_eofs, server_hostname)
440 попробовать:
-> 441 cnx.do_handshake ()
442 кроме OpenSSL.SSL.WantReadError:
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ OpenSSL \ SSL.py в
do_handshake (self) 1906 result =
_lib.SSL_do_handshake (self._ssl)
-> 1907 self._raise_ssl_error (self._ssl, результат) 1908
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ OpenSSL \ SSL.py в
_raise_ssl_error (self, ssl, result) 1631 повысить SysCallError (errno, errorcode.get (errno))
-> 1632 повысить SysCallError (-1, «Неожиданный EOF») 1633 еще:
SysCallError: (-1, «Неожиданный EOF»)
Во время обработки вышеуказанного исключения произошло другое исключение:
SSLError Traceback (самый последний вызов
прошлой)
C: \ ProgramData \ Anaconda3 \ Lib \ сайт-пакеты \ urllib3 \ connectionpool.py
в urlopen (self, метод, url, body, заголовки, повторные попытки, перенаправление,
assert_same_host, timeout, pool_timeout, release_conn, chunked,
body_pos, ** response_kw)
600 body = body, заголовки = заголовки,
-> 601 кусок = кусок)
602
C: \ ProgramData \ Anaconda3 \ Lib \ сайт-пакеты \ urllib3 \ connectionpool.py
в _make_request (self, conn, метод, url, timeout, chunked,
** httplib_request_kw)
345 попробовать:
-> 346 self._validate_conn (conn)
347 кроме (SocketTimeout, BaseSSLError) как e:
C: \ ProgramData \ Anaconda3 \ Lib \ сайт-пакеты \ urllib3 \ connectionpool.py
в _validate_conn (self, conn)
849, если не getattr (conn, 'sock', None): # AppEngine может не иметь .sock
-> 850 conn.connect ()
851
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ urllib3 \ connection.py в
подключения (сам)
325 имя_сервера = имя хоста,
-> 326 ssl_context = context)
327
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ urllib3 \ util \ ssl_.py в
ssl_wrap_socket (носок, ключевой файл, certfile, cert_reqs, ca_certs,
имя_сервера, ssl_version, шифры, ssl_context, ca_cert_dir)
328 if HAS_SNI: # для платформы: OpenSSL с включенным SNI
-> 329 вернуть context.wrap_socket (носок, имя_сервера = имя_сервера)
330
C: \ ProgramData \ Anaconda3 \ Lib \ сайт-пакеты \ urllib3 \ вно \ pyopenssl.py
в wrap_socket (self, sock, server_side, do_handshake_on_connect,
suppress_ragged_eofs, server_hostname)
447 кроме OpenSSL.SSL.Error as e:
-> 448 рейз ssl.SSLError ('плохое рукопожатие:% r'% e)
449 перерыв
SSLError: («плохое рукопожатие: SysCallError (-1,« Неожиданный EOF »)»,)
Во время обработки вышеуказанного исключения произошло другое исключение:
MaxRetryError Traceback (самый последний вызовпоследняя) C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ запросы \ adapters.py
в отправке (сам, запрос, поток, тайм-аут, проверка, сертификат, прокси)
439 попыток = self.max_retries,
-> 440 тайм-аут = тайм-аут
441)
C: \ ProgramData \ Anaconda3 \ Lib \ сайт-пакеты \ urllib3 \ connectionpool.py
в urlopen (self, метод, url, body, заголовки, повторные попытки, перенаправление,
assert_same_host, timeout, pool_timeout, release_conn, chunked,
body_pos, ** response_kw)
638 retries = retries.increment (метод, URL, ошибка = e, _pool = self,
-> 639 _stacktrace = sys.exc_info () [2])
640 попыток. Сон ()
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ urllib3 \ util \ retry.py в
приращение (self, method, url, response, error, _pool, _stacktrace)
387 если new_retry.is_exhausted ():
-> 388 повысить MaxRetryError (_pool, url, error или ResponseError (причина))
389
MaxRetryError: HTTPSConnectionPool (host = 'www.mycardtamoil.it',
порт = 443): максимальное количество повторов превышено с помощью URL: / (вызвано
SSLError (SSLError ("плохое рукопожатие: SysCallError (-1, 'неожиданно"
EOF ')»,)))
Во время обработки вышеуказанного исключения произошло другое исключение:
SSLError Traceback (самый последний вызов
последний) в ()
1 запрос на импорт
----> 2 response = запросы.get ('https://www.mycardtamoil.it/', verify = False)
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ запросы \ api.py в get (url,
params, ** kwargs)
70
71 kwargs.setdefault ('allow_redirects', True)
---> 72 запроса на возврат ('get', url, params = params, ** kwargs)
73
74
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ запросы \ api.py в
запрос (метод, url, ** kwargs)
56 # случаев и выглядят как утечка памяти в других.
57 с sessions.Session () в качестве сессии:
---> 58 return session.request (method = method, url = url, ** kwargs)
59
60
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ запросы \ sessions.py в
запрос (self, method, url, params, data, заголовки, куки, файлы,
auth, timeout, allow_redirects, прокси, хуки, поток, проверка, сертификат,
JSON)
506}
507 send_kwargs.update (настройки)
-> 508 отн = self.send (prep, ** send_kwargs)
509
510 возврат или 1059 *
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ запросы \ sessions.py в
отправить (самостоятельно, запрос, ** kwargs)
616
617 # Отправить запрос
-> 618 r = adapter.send (запрос, ** кваргс)
619
620 # Общее время запроса (приблизительно)
C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ запросы \ adapters.py в
отправить (самостоятельно, запрос, поток, тайм-аут, проверка, сертификат, прокси)
504 если isinstance (e.reason, _SSLError):
505 # Эта ветка для urllib3 v1.22 и новее.
-> 506 повысить SSLError (e, запрос = запрос)
507
508 поднять ConnectionError (e, request = request)
SSLError: HTTPSConnectionPool (host = 'www.mycardtamoil.it', port = 443):
Максимальное количество попыток превышено с помощью URL: / (вызвано SSLError (SSLError ("bad
рукопожатие: SysCallError (-1, 'Неожиданный EOF') ",),))
Может кто-нибудь помочь мне понять, как я могу это исправить с помощью модуля запросов?