Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 15 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Curl es una utilidad de línea de comandos utilizada como cliente HTTP. Es muy popular para hacer peticiones HTTP desde la línea de comandos. cURL puede utilizarse para escribir scripts para web scraping, comprobar la salud de un sitio y descargar archivos desde la línea de comandos.

Es increíblemente sencillo y puede utilizarse en muchos lenguajes de programación. Este artículo explica qué es cURL y cómo usarlo en Python.

¿Qué es cURL?

YouTube vídeo

Según la sitio webcURL son las siglas de "client URL". Es una herramienta de línea de comandos y una biblioteca para transferir datos utilizando diferentes protocolos de red de capa de aplicación como HTTP, HTTPS, FTP e IMAP.

Es increíblemente popular y se utiliza en más de 10.000 millones de instalaciones en dispositivos como radios y televisores, routerscURL es totalmente gratuito y de código abierto. Su código fuente está disponible en GitHub.

Casos de uso de cURL

cURL es muy útil y versátil. A continuación se enumeran los casos de uso más populares de cURL. Aunque la lista no es exhaustiva, los siguientes son sólo algunos de los casos más populares:

  • Pruebas de API: Puede comprobar si la API funciona correctamente, devolviendo los datos correctos para una solicitud determinada. Además, también se puede utilizar para comprobar la velocidad de la API, es decir, la rapidez con la que responde a las solicitudes. Puede escribir un script para comprobar la salud de la API periódicamente y enviar alertas cuando algo vaya mal.
  • Raspado web: También puede extraer datos automáticamente de sitios web. cURL puede utilizarse junto con muchos lenguajes de programación y como comando Bash. Con cURL, puede obtener datos de sitios web de forma dinámica. A partir de la respuesta HTMLpodrás analizar y extraer los datos que necesites. Si está interesado en el web scraping, puede consultar la página API de raspado web de Geekflare que facilita el raspado de datos.
  • Descarga de datos: Con cURL, puede guardar la respuesta de las peticiones en un archivo. Estas respuestas pueden ser datos de peticiones API o archivos de un servidor. Efectivamente, al escribir la respuesta en un archivo, has descargado el archivo. Como cURL es una herramienta de línea de comandos, puedes automatizar este proceso para descargar muchos archivos a la vez.

Cómo utilizar cURL en Python (PycURL)

Instalación de PycURL

Para utilizar cURL en Python, utilizamos la biblioteca PycURL. PycURL es una interfaz de Python para la biblioteca cURL. Crea una fina envoltura sobre la ya rápida librería cURL. Esto hace que PycURL sea más rápida que otras librerías para hacer peticiones como urllib y requests. Para usar PycURL, primero tienes que instalarlo. Hay instrucciones detalladas aquí, pero una forma fácil de instalarlo es usando pip.

pip install PycURL

En Ubuntu 22.04, tuve que instalar herramientas adicionales antes de instalar PycURL. Utilice este comando antes de intentar instalar PycURL con pip:

sudo apt install libcurl4-openssl-dev libssl-dev

Realizar una solicitud GET sencilla

Para realizar una solicitud, comience por crear un script Python en el que escribir el código. Abra el archivo con un editor de texto. Yo voy a usar Vim, pero puedes usar el que quieras. Para abrir el archivo con Vim, utilice el comando que se indica a continuación:

vim pycurl.py

Toma, pycurl.py es el nombre del archivo en el que voy a escribir mi código, pero puedes nombrar tu archivo como quieras.

A continuación, importamos la clase cURL del módulo PycURL

from pycurl import Curl

Después de importar PycURL, importamos BytesIO de io. Necesitaremos esto para crear un buffer para escribir la respuesta de PycURL.

from io import BytesIO

A continuación, instanciamos una nueva instancia de Curl.

c = Curl()

A continuación, instanciamos BytesIO para crear un nuevo buffer. PycURL no tiene un mecanismo de almacenamiento integrado para guardar las respuestas. Así que tenemos que crear un buffer y decirle dónde escribir los datos.

buffer = BytesIO()

Con el buffer creado, podemos establecer opciones en nuestro objeto cliente. En este caso, queremos establecer dos opciones; la primera es la URL que solicitamos. La segunda es donde queremos escribir el cuerpo de la respuesta. Aquí está el código para hacerlo:

c.setopt(c.URL, 'http://pycurl.io/')
c.setopt(c.WRITEDATA, buffer)

Una vez hecho esto, podemos realizar la petición llamando al método perform del objeto cliente y luego cerrar la petición llamando al método close.

c.perform()
c.close()

Para obtener la respuesta, llamamos a la función getvalue() del objeto buffer y decodificarlo. A continuación, podemos imprimirlo en la consola.

body = buffer.getvalue()
print(body.decode('iso-8859-1'))

Tu archivo debería tener este aspecto:

from pycurl import Curl
from io import BytesIO

# Create a pycUrl instance
c = Curl()
buffer = BytesIO()

c.setopt(c.URL, 'http://pycurl.io/')
c.setopt(c.WRITEDATA, buffer)

# Make the request
c.perform()

# Close the connection
c.close()

body = buffer.getvalue()
print(body.decode('iso-8859-1'))

Después de ejecutar el script, debería obtener la siguiente salida:

Screenshot-from-2023-04-18-11-35-49

Realizar una solicitud POST

Para realizar una solicitud POST, tendrá que establecer el parámetro POSTFIELDS del objeto cliente cURL. Por ejemplo, aquí se muestra una solicitud que realiza una petición POST a la API de marcador de posición JSON.

from io import BytesIO
from json import dumps
from pycurl import Curl

# Create a pycUrl instance
c = Curl()
buffer = BytesIO()

# Create a data dictionary
data = {
    'userId': 1,
    'title': 'Lorem Ipsum',
    'body': 'Dolor sit amet'
}

# Encode the data to json
encoded_data = dumps(data)

# Set request options
c.setopt(c.URL, 'https://jsonplaceholder.typicode.com/posts')
c.setopt(c.HTTPHEADER, ['Accept: application/json', 'Content-Type: application/json'])
c.setopt(c.POSTFIELDS, encoded_data)
c.setopt(c.WRITEDATA, buffer)

# Make the request
c.perform()

# Close the connection
c.close()

body = buffer.getvalue()
print(body.decode('iso-8859-1'))

En el código anterior, he creado un objeto diccionario con los datos que voy a enviar como parte de la petición. A continuación, codifiqué los datos en JSON y los envié adjuntos como carga útil a la solicitud estableciendo la opción POSTFIELDS en los datos codificados. También especifiqué cabeceras para especificar el tipo de contenido de la petición y el tipo de datos de la respuesta aceptada. Cuando ejecutes el código, deberías obtener una respuesta como esta.

Screenshot-from-2023-04-19-10-50-10

Redacción de respuestas a expedientes

También puede pasar un búfer de archivo a la opción WRITEDATA de cURL. Esto escribirá los datos de respuesta en el archivo. El siguiente ejemplo ilustra el concepto:

from pycurl import Curl

file_name = 'output.json'

# Opening the file in write mode
with open(file_name, 'wb') as f:
    
    # Creating a Curl instance
    c = Curl()

    # Set request options
    c.setopt(c.URL, 'https://jsonplaceholder.typicode.com/users/1')
    c.setopt(c.HTTPHEADER, ['Accept: application/json'])
    c.setopt(c.WRITEDATA, f)

    # Make the request
    c.perform()

    # Close the connection
    c.close()

    print(f'Wrote output to {file_name}')

Alternativas a PycURL

PycURL sólo proporciona una fina capa sobre la librería cURL. Esto hace que sea altamente personalizable ya que tienes más control sobre las características de nivel inferior.

Sin embargo, lo hace más difícil de usar y, por lo tanto, está más dirigido a los desarrolladores avanzados. A menudo, puedes querer una alternativa más simple a PycURL. En esta sección, discutiremos las alternativas.

#1. Otras bibliotecas

Además de PycURL, Python tiene otras librerías que se pueden usar para hacer peticiones. Estas incluyen la librería requests y la librería urllib. Ambas son alternativas populares y más sencillas que pycURL.

#2. Otras lenguas

cURL tiene interfaces implementadas en otros idiomas. Un sitio web popular para convertir sitios web cURL es Conversor de rizos. Con el Conversor cURL, escribes un comando cURL para la petición que quieras hacer, y automáticamente convierte tu comando a cualquier lenguaje de programación elegido. También puedes simplemente llamar al comando cURL directamente en tu terminal o escribir un script Bash.

Palabras finales

En este artículo, presenté cURL y expliqué cómo usarlo en Python usando el módulo PycURL. También discutimos alternativas a PycURL, como el módulo requests y el uso de lenguajes diferentes para tus programas.

A continuación, consulte Uso de comandos cURL con ejemplos en tiempo real.

  • Anesu Kafesu
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba el lunes
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder