Пытаюсь подключиться к сайту с помощью библиотеки requests на python.
Через f12 я скопировал и отформатировал заголовки, которые отправляет хром при get-запросе к нему.
Код не выполняется: ругается на двоеточия. Если их убрать, то это неправильно, т.к. двоеточия нужны иначе браузер бы их не слал в заголовках?
spoilerimport requests, time, certifi
headersChrome = {
':authority': 'secret_site.badbadbadbadbadbadbad'
':method': 'GET',
':path': '/',
':scheme': 'https',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-encoding': 'gzip, deflate, br, zstd',
'accept-language': 'ru,en;q=0.9,uk;q=0.8',
'cache-control': 'max-age=0',
'cookie': 'PHPSESSID=3f4ABRACADABRA',
'priority': 'u=0, i',
'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="132", "Google Chrome";v="132"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36'
}
session = requests.Session()
session.headers.update(headersChrome)
page = ''
while page == '':
try:
page = session.get(url, cert=r'C:\secret_site.badbadbadbadbadbadbad.crt')
break
except:
print("Connection refused by the server..")
print("Let me sleep for 5 seconds")
print("ZZzzzz...")
time.sleep(5)
print("Was a nice sleep, now let me continue...")
continue
Не получается просто подключиться к сайту (https) без всяких заголовков. Ругается на сертификат, если убрать верхний цикл и оставить только
session.get(url)
, то выпадает ошибка связанная с сертификатом (SSLError).
Хром не испытывает проблем с проверкой надежности этого сайта.
В браузере зашёл в инструмент просмотра сертификатов, нажал экспорт. Сохранился файлик. Указал путь к этому файлу в качестве параметра: page = session.get(url, cert=r'C:\secret_site.badbadbadbadbadbadbad.crt')
Не помогло:
spoilerHTTPSConnectionPool(host='secret', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(524297, '[SSL] PEM lib (_ssl.c:4097)')))
Если не передавать вторым параметром ничего
page = session.get(url)
или
page = session.get(url,verify=certifi.where())
, то ругается на сертификат:
spoilerHTTPSConnectionPool(host='secret', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1018)')))
Подключаться с опцией verify = false, не вариант, я не хочу чтоб мои данные и финансы украли.
Можно как-то избавиться от ошибки?