Descubra cómo utilizar cURL con Proxy
Andrei Ogiolan el 05 dic 2022
¿Qué es cURL?

Para llegar al objetivo de este artículo que es aprender a usar cURL con un Proxy, primero necesitamos introducir cURL. Client URL(cURL) es, para abreviar, una línea de comandos fácil de usar diseñada para desarrolladores para obtener algunos datos de un servidor.
¿Cómo utilizar cURL?
Como ya he mencionado anteriormente, el uso de cURL es bastante sencillo y puede extraer información con sólo un comando de una línea. Lo primero que hay que hacer es abrir un terminal y escribir curl seguido de un enlace a una página web, por ejemplo:
$ curl 'https://www.webscrapingapi.com/'
Enhorabuena, has realizado tu primera petición utilizando cURL. Este sencillo comando solicita información al servidor como lo hace un navegador tradicional y devuelve el HTML de la página. No todos los sitios web te devolverán HTML, hay endpoints que devuelven los datos como un objeto JSON. Mira este ejemplo:
$ curl 'https://jsonplaceholder.typicode.com/todos/3'
Escriba este comando en su terminal y debería obtener esta respuesta:
{
"userId": 1,
"id": 3,
"title": "fugiat veniam minus",
"completed": false
}
La mayoría de las API le devolverán HTML o JSON cuando ejecute comandos cURL contra 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. Alternativamente, puedes ejecutar el siguiente comando:
$ curl --help
Esto le mostrará algunas opciones que puede 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 puedes ver estas ni siquiera son todas las opciones que puedes configurar en cURL, es un menú dividido en categorías. Usted probablemente adivinado que con el fin de obtener todas las opciones que le gustaría ejecutar:
$ curl --help all
Sin embargo, utilizar sólo cURL tiene algunas limitaciones en cuanto al número de servidores de los que podemos elegir obtener datos. Por ejemplo, algunos servidores pueden utilizar la geolocalización y negarse a darnos los datos que buscamos debido a nuestra ubicación. Este es el momento en que necesitamos un proxy, que actúa como intermediario entre nosotros y el servidor de destino.
¿Qué es un poder?
El concepto de servidor proxy no es difícil de entender. Como ya se ha mencionado, un servidor proxy es como un intermediario entre un cliente que solicita un recurso y el servidor que lo proporciona. Los proxies son designados 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 sólo proporciona esos datos si estamos en Europa, pero nosotros estamos en Estados Unidos.
¿Cómo lo hacemos? Enviamos nuestra petición a un servidor proxy que se encuentra en Europa y no a Bob y le decimos al proxy que queremos obtener algunos datos de Bob. El proxy enviará la petición a Bob y Bob devolverá al servidor proxy los datos, ya que el proxy está en Europa. Entonces el servidor proxy nos devolverá 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 una mayor comprensión de los proxies, le recomiendo encarecidamente que eche 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 una URL de destino de la que quieras obtener datos. Para este ejemplo, utilizaré un proxy proporcionado por WebScrapingAPI para realizar peticiones, del que puedes encontrar más información aquí. WebScrapingAPI no es un proveedor de proxy, es un servicio de web scraping que proporciona proxies en su lugar. En nuestros ejemplos, nuestra configuración será la siguiente:
- Nombre de host del proxy: proxy.webscrapingapi.com
- Puerto proxy: 80
- Nombre de usuario del proxy: webscrapingapi.proxy_type=datacenter.device=desktop
- Proxy password: <YOUR-API-KEY-HERE> // you can get one by registering here
- URL de destino: http://httpbin.org/get
Tenga en cuenta que puede haber algunos proveedores de proxy que requieran otro esquema de autenticación.
¿Cómo utilizar cURL con un proxy?
Ya que hemos cubierto cURL y proxies, ahora estamos listos para combinarlos y hacer peticiones usando un proxy, lo cual es un proceso bastante sencillo. Primero necesitamos autenticarnos y luego podemos usar el proxy.
Autenticación proxy en cURL
La autenticación proxy en cURL es bastante simple y se puede hacer para nuestro ejemplo de arriba de la siguiente manera:
$ curl -U webscrapingapi.proxy_type=datacenter.device=desktop:<YOUR-API-KEY> --proxy @proxy.webscrapingapi.com:80 http://httpbin.org/get
Ejecutando 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 puedes ver, el origen que recibes de vuelta no es tu dirección IP y en su lugar es la dirección del servidor proxy. Además, puede ejecutar el comando incluso sin revelar su 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, se le pedirá que introduzca su contraseña:
Introduzca la contraseña del proxy para el usuario 'webscrapingapi.proxy_type=datacenter.device=desktop':
Ahora puedes escribir tu clave API allí sin exponerla en la terminal, haciendo todo el proceso más seguro. Además, escribir tus credenciales, host y puerto cada vez que quieres ejecutar un comando cURL a través de un proxy puede no ser lo ideal, especialmente cuando quieres ejecutar muchos comandos a través de un proxy y estás usando el mismo proveedor de proxy.
Por supuesto, puedes almacenar tus credenciales en un archivo separado almacenado en tu máquina y copiarlas y pegarlas cada vez, pero hay un enfoque más natural que puedes tomar que es pasarlas a través de variables de entorno de las que hablaremos a continuación.
Uso de cURL con un proxy mediante variables de entorno
Una variable de entorno es como un objeto que almacena un valor editable en la memoria 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 detalles de nuestro proxy y que no necesitaremos especificar en cada ejecución del 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 usted no necesita pasar sus credenciales en cada ejecución más y ahora sólo puede ejecutar cURL tan simple como esto:
$ 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 dirección 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 detalles del proxy, cURL se encargará de eso por nosotros.
Deshabilitar el proxy para un comando específico
Sin embargo, si necesitas enviar una petición específica sin un proxy, no necesitas preocuparte de borrar el valor de la variable http_proxy. Siendo una herramienta sofisticada con un montón de opciones, cURL puede encargarse de eso por nosotros mediante su parámetro proxy que le indica que no utilice ningún proxy al hacer la petición. Se puede hacer de la siguiente manera:
$ curl --noproxy "*" http://httpbin.org/get
Y eso nos devolverá nuestra dirección IP, no los proxies.
Resumen
En conclusión, usar cURL con un proxy es una buena forma de saltarse los filtros de geolocalización, amplía el número de recursos que podemos obtener de servidores web y es un buen punto de partida para adentrarnos en temas como el web-scraping donde necesitamos usar proxies para poder obtener ciertos datos o recibirlos en el formato que queramos.Espero que este artículo te haya resultado útil para aprender a usar cURL con un proxy y te animes a jugar con él y construir tus propios scripts que extraigan datos de servidores que usan filtros de geolocalización.
Noticias y actualidad
Manténgase al día de las últimas guías y noticias sobre raspado web suscribiéndose a nuestro boletín.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artículos relacionados

Explore las complejidades del scraping de datos de productos de Amazon con nuestra guía en profundidad. Desde las mejores prácticas y herramientas como Amazon Scraper API hasta las consideraciones legales, aprenda a superar los desafíos, eludir los CAPTCHA y extraer información valiosa de forma eficiente.


Aprenda a scrapear sitios web dinámicos con JavaScript utilizando Scrapy y Splash. Desde la instalación hasta la escritura de una araña, el manejo de la paginación y la gestión de las respuestas de Splash, esta completa guía ofrece instrucciones paso a paso tanto para principiantes como para expertos.


Conozca cuál es el mejor navegador para eludir los sistemas de detección de Cloudflare mientras hace web scraping con Selenium.
