Преобразование cURL в Python Requests: пошаговое руководство

Вы копируете запрос из инструментов разработчика (DevTools) вашего браузера в виде команды cURL.

Вы получаете заголовки, куки и токены авторизации.

Но в итоге у вас получается 30 строк запутанного shell-кода. А вы хотели чистый Python.

Вот как вручную преобразовать команду cURL в библиотеку Python requests.

  1. Определите метод Если вы видите --data или --data-raw, curl по умолчанию использует POST. Не предполагайте, что это GET-запрос только потому, что отсутствует флаг -X.

  2. Обработайте заголовки Каждый флаг -H становится записью в словаре. При разделении строки заголовка разделяйте её только по первому двоеточию. Значения вроде URL или временных меток содержат двоеточия. Если разделять по каждому двоеточию, вы повредите данные.

  3. Управление куки Флаг -b предоставляет строку, разделенную точкой с запятой. Не добавляйте это в словарь заголовков. Вместо этого передайте это в аргумент cookies в виде словаря. Это позволит библиотеке самой обработать кодирование.

  4. Использование JSON вместо Data Это распространенная ошибка. Если тип контента application/json, используйте аргумент json=. Это сериализует ваш словарь и автоматически установит правильный заголовок. Если вы используете data=, requests применит form-encoding. Из-за этого API отклонит ваш запрос.

  5. Очистка параметров Перенесите строку запроса из URL в словарь params. Это сделает ваш код читаемым. Следите за двойным кодированием. Если URL уже закодирован, не кодируйте его повторно в словаре.

Структура итогового кода выглядит так:

import requests

url = "https://api.example.com/v2/search"
params = {"lang": "en", "page": "2"}
headers = {
    "accept": "application/json",
    "authorization": "Bearer token_here",
    "referer": "https://app.example.com/dashboard",
}
cookies = {"session": "abc123"}
payload = {"q": "nginx"}

resp = requests.post(
    url,
    params=params,
    headers=headers,
    cookies=cookies,
    json=payload,
)

resp.raise_for_status()
print(resp.json())

Распространенные ловушки, которых следует избегать:

  • Путаница между files= и data= при multipart-загрузках.
  • Разделение заголовков по каждому двоеточию.
  • Двойное кодирование параметров запроса.

Источник: https://dev.to/wanfeng/from-browser-curl-to-clean-python-requests-code-step-by-step-25oh