Загрузка документов с сайта https Ошибка: сбой квитирования оповещения sslv3
Анаконда - Питон 3,6
OpenSSL 1.0.2
Операционная система: Windows 7
Этап 1 (Завершено): Использование селена: запуск, навигация и извлечение различных элементов данных, включая таблицу с сайта. Извлеченные гиперссылки, содержащиеся в таблице, являются прямыми ссылками на документы.
Этап 2. Извлечение извлеченной гиперссылки из таблицы. Мне нужно загрузить файлы в указанную папку на общем диске.
Пытался:
import urllib.request
url = 'tts website/test.doc'
urllib.request.urlretrieve(url,'C:\Users\User\Desktop\')
Я получаю сообщение об ошибке sslv3 alert handshake
Открыв сайт, я нажал на значок блокировки и нажал "Установить сертификат". Я сохранил сертификат в своих "Доверенных корневых центрах сертификации" в хранилище сертификатов.
Я могу увидеть имя сертификата (когда я установил сертификат) из вышеприведенного шага в 58 сертификатах CA, показанных с помощью следующего кода:
import socket
import ssl
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
context.verify_mode = ssl.CERT_REQUIRED
context.load_default_certs()
ca_certs = context.get_ca_certs()
print('{} CA Certificates loaded: ' .format(len(ca_certs)))
for cert_dict in ca_certs:
print(cert_dict['subject'])
print()
Я не могу понять, как обеспечить SSL-соединение с сайтом / сервером, чтобы загрузить файл с каждой из гиперссылок?? Этот веб-сайт использует единый вход (SSO) и автоматически регистрирует меня при первом запуске веб-сайта.
Я пытался использовать сервер server.net 443 для подключения к серверу, но похоже, что сценарий не подходит для подключения и получения документа.
Я подключился напрямую к серверу и извлек детали сертификата, показанные здесь:
HOST, PORT = server.net, 443
ctx = ssl.create_default_context()
s = ctx.wrap_socket(socket.socket(), server_hostname=HOST)
c.connect((HOST, PORT))
cert = s.getpeercert()
print(cert)
Когда я запускаю urlretrieve, я все еще получаю ту же ошибку: рукопожатие. При просмотре моих сертификатов CA я вижу, что там указан личный сертификат для моего логина Windows (имя пользователя), который должен быть таким, каким он автоматически регистрирует меня, используя SSO. Как мне взять всю эту информацию, подключиться к веб-сайту, используя мой SSO, и получить документы?
Последнее обновление:
Я считаю Pycurl многообещающим, однако я чувствую, что мне нужна небольшая помощь, чтобы сделать несколько настроек, чтобы он заработал.
import pycurl
fp = open('Test.doc','wb')
curl = pycurl.Curl()
curl.setopt(pycurl.URL, url) # see url link to go to word doc
curl.setopt(pycurl.FOLLOWLOCATION, 1)
curl.setopt(pycurl.MAXREDIRS, 5)
curl.setopt(pycurl.CONNECTTIMEOUT,30)
curl.setopt(pycurl.TIMEOUT, 300)
try:
curl.setopt(pycurl.WRITEDATA, fp)
curl.perform()
except:
import traceback
traceback.print_exc(file=sys.stderr)
sys.stderr.flush()
curl.close()
fp.close()
Этот код не выдает ошибки, однако созданное слово doc содержит ошибку, отображающую экран печати журнала на странице веб-сайта.
Основная проблема: HTTPS-соединение с использованием единого входа в систему за прокси-сервером корпоративной сети.
Я пытался заставить это работать для проверки cacert, но сейчас я получаю это сообщение об ошибке:
curl.setopt(pycurl.SSL_VERIFYPEER, 1)
curl.setopt(pycurl.SSL_VERIFYPEER, 2)
curl.setopt(pycurl.CAINFO, certifi.where())
но теперь я получаю ОШИБКУ: 51, CERT_TRUST_IS_UNTRUSTED_ROOT
Как мне добавить прокси, если это вызывает ошибку? и во-вторых, как мне прикрепить файл сертификата CA напрямую?