Преобразование cURL в Python Requests: пошаговое руководство
Вы копируете запрос из инструментов разработчика (DevTools) вашего браузера в виде команды cURL.
Вы получаете заголовки, куки и токены авторизации.
Но в итоге у вас получается 30 строк запутанного shell-кода. А вы хотели чистый Python.
Вот как вручную преобразовать команду cURL в библиотеку Python requests.
Определите метод Если вы видите
--dataили--data-raw, curl по умолчанию использует POST. Не предполагайте, что это GET-запрос только потому, что отсутствует флаг-X.Обработайте заголовки Каждый флаг
-Hстановится записью в словаре. При разделении строки заголовка разделяйте её только по первому двоеточию. Значения вроде URL или временных меток содержат двоеточия. Если разделять по каждому двоеточию, вы повредите данные.Управление куки Флаг
-bпредоставляет строку, разделенную точкой с запятой. Не добавляйте это в словарь заголовков. Вместо этого передайте это в аргументcookiesв виде словаря. Это позволит библиотеке самой обработать кодирование.Использование JSON вместо Data Это распространенная ошибка. Если тип контента
application/json, используйте аргументjson=. Это сериализует ваш словарь и автоматически установит правильный заголовок. Если вы используетеdata=,requestsприменит form-encoding. Из-за этого API отклонит ваш запрос.Очистка параметров Перенесите строку запроса из 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