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.

  1. Determina el método Si ves --data o --data-raw, curl utiliza POST por defecto. No asumas que es una solicitud GET solo porque falta la bandera -X.

  2. Gestiona los encabezados Cada bandera -H se 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.

  3. Gestiona las cookies La bandera -b proporciona una cadena separada por puntos y coma. No pongas esto en tu diccionario de encabezados. En su lugar, pásalo al argumento cookies como un diccionario. Esto permite que la librería se encargue de la codificación.

  4. Uso de JSON vs Data Este es un error común. Si el tipo de contenido es application/json, utiliza el argumento json=. Esto serializa tu diccionario y establece el encabezado correcto por ti. Si usas data=, requests utilizará codificación de formulario (form-encoding). Esto hará que la API rechace tu solicitud.

  5. 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= con data= 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