Convertir cURL a Python Requests paso a paso
Copias una solicitud de las DevTools de tu navegador como un comando cURL.
Obtienes los encabezados, las cookies y los tokens de autenticación.
Pero terminas con 30 líneas de código shell desordenado. Lo que querías era Python limpio.
Aquí te explicamos cómo mapear manualmente un comando cURL a la librería requests de Python.
Determina el método Si ves
--datao--data-raw, curl utiliza POST por defecto. No asumas que es una solicitud GET solo porque falta la bandera-X.Gestiona los encabezados Cada bandera
-Hse convierte en una entrada en un diccionario. Al dividir la cadena del encabezado, hazlo solo en el primer signo de dos puntos (:). Valores como URLs o marcas de tiempo contienen dos puntos. Si divides en cada signo de dos puntos, romperás los datos.Gestiona las cookies La bandera
-bproporciona una cadena separada por puntos y coma. No pongas esto en tu diccionario de encabezados. En su lugar, pásalo al argumentocookiescomo un diccionario. Esto permite que la librería se encargue de la codificación.Uso de JSON vs Data Este es un error común. Si el tipo de contenido es
application/json, utiliza el argumentojson=. Esto serializa tu diccionario y establece el encabezado correcto por ti. Si usasdata=,requestsutilizará codificación de formulario (form-encoding). Esto hará que la API rechace tu solicitud.Limpia los parámetros Mueve la cadena de consulta (query string) de la URL a un diccionario
params. Esto hace que tu código sea legible. Ten cuidado con la doble codificación. Si la URL ya está codificada, no la codifiques de nuevo en tu diccionario.
La estructura final del código se ve así:
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())
Trampas comunes que debes evitar:
- Confundir
files=condata=durante las cargas multipart. - Dividir los encabezados en cada signo de dos puntos.
- Codificar dos veces los parámetros de consulta.
Fuente: https://dev.to/wanfeng/from-browser-curl-to-clean-python-requests-code-step-by-step-25oh