Задать вопрос
@Closename

InvalidHeader и SSLError — как исправить?

Пытаюсь подключиться к сайту с помощью библиотеки requests на python.
Через f12 я скопировал и отформатировал заголовки, которые отправляет хром при get-запросе к нему.
Код не выполняется: ругается на двоеточия. Если их убрать, то это неправильно, т.к. двоеточия нужны иначе браузер бы их не слал в заголовках?
spoiler
import 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')
Не помогло:
spoiler
HTTPSConnectionPool(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()), то ругается на сертификат:
spoiler
HTTPSConnectionPool(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, не вариант, я не хочу чтоб мои данные и финансы украли.

Можно как-то избавиться от ошибки?
  • Вопрос задан
  • 68 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
1. так ты запятую потерял, после первой пары в headersChrome
2. за такой except надо сильно бить ногами, ты скрыл все ошибки, ты про них вообще ничего не знаешь
Ответ написан
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Кстати насчетРугается на сертификат - sertifi вы импортировали, а использовать-то его?
Ключ в requests.get(url, verify=certifi.where())
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
19 февр. 2025, в 21:51
50000 руб./за проект
19 февр. 2025, в 21:33
150000 руб./за проект
19 февр. 2025, в 21:08
30000 руб./за проект