ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант

Как правильно отправить запрос с заголовками и куками?

Добрый день. Начал разбираться с питоном, делаю парсер. В браузере, в консоли, посмотрел заголовки с сделал "Скопировать как fetch". Получил примерно это:
spoiler
fetch("https://site.com/api/", {
  "headers": {
    "accept": "*/*",
    "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
    "id": "12345",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin"
  },
  "referrer": "https://site.com/api",
  "referrerPolicy": "no-referrer-when-downgrade",
  "body": null,
  "method": "GET",
  "mode": "cors",
  "credentials": "include"
});

В консоли браузера такой код работает, ответ 200 + данные
Вопрос: как сделать такой запрос с помощью python?
Пробовал так:
def get_data(cookies, headers):
    base_url = 'https://site.com'
    method_url = '/api'

    with requests.Session() as session:
        for cookie in cookies:
            session.cookies.update(cookie)
        url = base_url + method_url        
        response = session.get(url=url, headers=headers)
        return response

Куки получаю через selenium пока
cookies = browser.get_cookies()
header не могу понять как сформировать. Если добавить как словарь,
spoiler
headers = {
        "accept": "*/*",
        "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
        "id": id,
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
      'referrer': 'https://site.com,
      'referrerPolicy': 'no-referrer-when-downgrade',
      'method': 'GET',
      'mode': 'cors',
      'credentials': 'include'
    }

то получаю ошибку
expected string or bytes-like object

Если как строку,
spoiler
headers = """
        "accept": "*/*",
        "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
        "id": id,
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
      'referrer': 'https://site.com,
      'referrerPolicy': 'no-referrer-when-downgrade',
      'method': 'GET',
      'mode': 'cors',
      'credentials': 'include'
    """

то получаю ошибку
'str' object has no attribute 'items'

Подскажите, где ошибся?
  • Вопрос задан
  • 37 просмотров
Решения вопроса 2
hottabxp
@hottabxp Куратор тега Python
Эксперт по BeautifulSoup(но это не точно!)
Можно еще так - "Copy as cURL", далее идёте на сайт curl.trillworks.com и конвертируете в код Python.
Ответ написан
ProgrammerForever
@ProgrammerForever Автор вопроса
Учитель, автоэлектрик, программист, музыкант
Разобрался, дело было не в headers, а в cookies
Рабочий код:
def get_data(cookies, id):
    base_url = 'https://site.com'
    method_url = '/api'    
    headers = {
    'id': str(id),
    'accept': '*/*',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-mode': 'cors',
    'sec-fetch-dest': 'empty',
    'referer': 'https://site.com',
    'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
    'method': 'GET',
    'mode': 'cors',
    'credentials': 'include'
    }

    with requests.Session() as session:
        for cookie in cookies:
            session.cookies.set(cookie['name'], cookie['value'])
        url = base_url + method_url        
        response = session.get(url=url, headers=headers)
        return response
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы