Volver al blog
Casos de uso
Andrei OgiolanLast updated on Mar 31, 20267 min read

Descubre cómo usar cURL con un proxy

Descubre cómo usar cURL con un proxy

¿Qué es cURL?

Para abordar el tema de este artículo, que trata sobre cómo utilizar cURL con un proxy, primero debemos presentar cURL. Client URL (cURL) es, en resumen, una línea de comandos fácil de usar diseñada para que los desarrolladores puedan recuperar datos de un servidor.

¿Cómo se utiliza cURL?

Como ya he mencionado anteriormente, usar cURL es bastante sencillo y permite extraer información con un comando de una sola línea. En primer lugar, debes abrir un terminal y escribir «curl» seguido del enlace de un sitio web, por ejemplo:

$ curl 'https://www.webscrapingapi.com/'

Enhorabuena, acabas de realizar tu primera solicitud con cURL. Este sencillo comando solicita información al servidor igual que lo haría un navegador tradicional y devuelve el código HTML de la página. No todos los sitios web te devolverán HTML; hay puntos de conexión que envían los datos como un objeto JSON. Veamos este ejemplo:

$ curl 'https://jsonplaceholder.typicode.com/todos/3'

Escribe este comando en tu terminal y deberías obtener esta respuesta:

{
  "userId": 1,
  "id": 3,
  "title": "fugiat veniam minus",
  "completed": false
}

La mayoría de las API te devolverán HTML o JSON cuando ejecutes comandos de cURL sobre ellas. Bueno, esto no es todo lo que cURL puede hacer por nosotros. En realidad, es una herramienta muy sofisticada que requiere mucho tiempo para dominarla. Si quieres aprender más sobre cURL, te recomiendo encarecidamente que eches un vistazo a la documentación de cURL para comprender mejor sus parámetros. Como alternativa, puedes ejecutar el siguiente comando:

$ curl --help

Esto te mostrará algunas opciones que puedes configurar en cURL:

Usage: curl [options...] <url>
-d, --data <data> HTTP POST data
-f, --fail Fail silently (no output at all) on HTTP errors
-h, --help <category> Get help for commands
-i, --include Include protocol response headers in the output
-o, --output <file> Write to file instead of stdout
-O, --remote-name Write output to a file named as the remote file
-s, --silent Silent mode
-T, --upload-file <file> Transfer local FILE to destination
-u, --user <user:password> Server user and password
-A, --user-agent <name> Send User-Agent <name> to server
-v, --verbose Make the operation more talkative
-V, --version Show version number and quit

This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".

Como probablemente puedas ver, estas ni siquiera son todas las opciones que puedes configurar en cURL; se trata de un menú dividido en categorías. Probablemente hayas adivinado que para obtener todas las opciones que te gustaría ejecutar:

$ curl --help all

Sin embargo, el uso de cURL por sí solo tiene algunas limitaciones en cuanto al número de servidores de los que podemos obtener datos. Por ejemplo, algunos servidores pueden utilizar la geolocalización y negarse a proporcionarnos los datos que buscamos debido a nuestra ubicación. Este es el momento en el que necesitamos un proxy, que actúa como intermediario entre nosotros y el servidor de destino.

¿Qué es un proxy?

El concepto de un servidor proxy no es nada difícil de entender. Como ya se ha mencionado anteriormente, un servidor proxy es como un intermediario entre un cliente que solicita un recurso y el servidor que proporciona dicho recurso. Los proxies están diseñados para que podamos obtener datos desde cualquier lugar. Para entender mejor este concepto, supongamos que tenemos un servidor llamado Bob que tiene algunos datos que nos interesan, pero Bob solo proporciona esos datos si estamos en Europa, y nosotros estamos en Estados Unidos.

¿Cómo lo solucionamos? Enviamos nuestra solicitud a un servidor proxy ubicado en Europa, en lugar de a Bob, y le indicamos al proxy que queremos obtener algunos datos de Bob. El proxy enviará la solicitud a Bob y Bob devolverá los datos al servidor proxy, ya que este se encuentra en Europa. A continuación, el servidor proxy nos reenviará los datos de Bob.

Este es el flujo principal de cómo funcionan los proxies. Otro gran caso de uso de un proxy es, por ejemplo, cuando queremos obtener datos que contengan precios en una moneda específica para evitar confusiones. Para comprender mejor los proxies, te recomiendo encarecidamente que eches un vistazo a Wikipedia.

Configuración del proxy

Para utilizar un proxy, lo más probable es que necesites un host, un puerto, un usuario, una contraseña y la URL de destino de la que deseas obtener datos. Para este ejemplo, utilizaré un proxy proporcionado por WebScrapingAPI para realizar solicitudes; puedes encontrar más información al respecto aquí. WebScrapingAPI no es un proveedor de proxies, sino un servicio de web scraping que proporciona proxies. En nuestros ejemplos, nuestra configuración será la siguiente:

  • Nombre de host del proxy: proxy.webscrapingapi.com
  • Puerto del proxy: 80
  • Nombre de usuario del proxy: webscrapingapi.proxy_type=datacenter.device=desktop
  • Contraseña del proxy: <TU-CLAVE-API-AQUÍ> // puedes obtener una registrándote aquí
  • URL de destino: http://httpbin.org/get

Ten en cuenta que puede haber algunos proveedores de proxy que requieran otro esquema de autenticación.

¿Cómo usar cURL con un proxy?

Ahora que hemos visto cURL y los proxies, estamos listos para combinarlos y realizar solicitudes utilizando un proxy, lo cual es un proceso bastante sencillo. Primero debemos autenticarnos y, a continuación, podremos utilizar el proxy.

Autenticación de proxy en cURL

La autenticación de proxy en cURL es bastante sencilla y, para nuestro ejemplo anterior, se puede realizar de la siguiente manera:

$ curl -U webscrapingapi.proxy_type=datacenter.device=desktop:<YOUR-API-KEY> --proxy @proxy.webscrapingapi.com:80 http://httpbin.org/get

Al ejecutar ese comando, httpbin nos devolverá nuestra dirección IP y algunas otras propiedades:

​​{
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", 
    "Accept-Encoding": "gzip, deflate, br", 
    "Host": "httpbin.org", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.5173.0 Safari/537.36", 
    "X-Amzn-Trace-Id": "Root=1-633af93b-35faf8637f37f7f075f185ec"
  }, 
  "origin": "45.9.120.69", 
  "url": "http://httpbin.org/get"
}

Como probablemente ya habrás visto, el origen que se te devuelve no es tu dirección IP, sino la dirección del servidor proxy. Además, puedes ejecutar el comando incluso sin revelar tu contraseña en el terminal. Esto se puede hacer de la siguiente manera:

$ curl -U webscrapingapi.proxy_type=datacenter.device=desktop --proxy @proxy.webscrapingapi.com:80 http://httpbin.org/get

A continuación, aparecerá un mensaje solicitándote que introduzcas tu contraseña:

Enter proxy password for user 'webscrapingapi.proxy_type=datacenter.device=desktop':

Ahora puedes escribir tu clave API allí sin exponerla en la terminal, lo que hace que todo el proceso sea más seguro. Además, escribir tus credenciales, host y puerto cada vez que quieras ejecutar un comando cURL a través de un proxy puede no parecer lo más ideal, especialmente cuando quieres ejecutar muchos comandos a través de un proxy y estás utilizando el mismo proveedor de proxy. 

Por supuesto, puedes guardar tus credenciales en un archivo independiente almacenado en tu equipo y copiarlas y pegarlas cada vez, pero hay un enfoque más natural que puedes adoptar, que consiste en pasarlas a través de variables de entorno, de lo que hablaremos a continuación.

Uso de cURL con un proxy a través de variables de entorno

Una variable de entorno es como un objeto que almacena un valor editable en la memoria y que puede ser utilizado por uno o más programas. En este caso concreto, podemos pasar a cURL una variable llamada http_proxy o https_proxy que contenga los datos de nuestro proxy, y así no tendremos que especificarlos cada vez que ejecutemos el comando. Puedes hacerlo ejecutando este comando:

$ export http_proxy="http://webscrapingapi.proxy_type=datacenter.device=desktop:<YOUR-API-KEY>@proxy.webscrapingapi.com:80"

Ten en cuenta que debes llamar a tu variable http_proxy o https_proxy para que cURL entienda de qué estás hablando. Eso es todo, ahora ya no necesitas pasar tus credenciales en cada ejecución y puedes simplemente ejecutar cURL de esta forma tan sencilla:

$ curl http://httpbin.org/get

Esto nos dará el siguiente resultado:

{
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", 
    "Accept-Encoding": "gzip, deflate, br", 
    "Host": "httpbin.org", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", 
    "X-Amzn-Trace-Id": "Root=1-633bf912-66ace1104304ddaf5ea8ac65"
  }, 
  "origin": "132.255.134.104", 
  "url": "http://httpbin.org/get"
}

Como probablemente veas, la dirección IP es la del proxy, lo que confirma que has hecho un gran trabajo configurando tu proxy. En este punto podemos ejecutar cualquier comando cURL sin especificar los datos del proxy; cURL se encargará de ello por nosotros.

Desactivar el proxy para un comando específico

Sin embargo, si necesitas enviar una solicitud específica sin proxy, no tienes que preocuparte por borrar el valor de la variable http_proxy. Al ser una herramienta sofisticada con muchas opciones, cURL puede encargarse de eso por nosotros mediante su parámetro proxy, que le indica que no utilice ningún proxy al realizar la solicitud. Se puede hacer de la siguiente manera:

$ curl --noproxy "*" http://httpbin.org/get

Y eso nos devolverá nuestra dirección IP, no la de los proxies.

Resumen

En conclusión, utilizar cURL con un proxy es una forma estupenda de eludir los filtros de geolocalización, amplía el número de recursos que podemos obtener de los servidores web y es un buen punto de partida para adentrarse en temas como el web scraping, donde necesitamos utilizar proxies para poder obtener ciertos datos o recibirlos en el formato que deseamos.Espero que este artículo te haya resultado útil para aprender a usar cURL con un proxy y que experimentes con él y crees tus propios scripts que extraigan datos de servidores que utilizan filtros de geolocalización.

Acerca del autor
Andrei Ogiolan, Desarrollador Full Stack @ WebScrapingAPI
Andrei OgiolanDesarrollador Full Stack

Andrei Ogiolan es desarrollador full stack en WebScrapingAPI, donde colabora en todas las áreas del producto y ayuda a crear herramientas y funciones fiables para la plataforma.

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.