Al desarrollar y probar APIs, a menudo surge la necesidad de enviar solicitudes a través de servidores proxy. Esto puede ser necesario para eludir restricciones geográficas, probar el comportamiento de la API desde diferentes regiones, garantizar la anonimidad o trabajar con servicios que bloquean IPs de centros de datos. En esta guía, analizaremos cómo configurar correctamente un proxy en populares clientes REST API y evitar errores comunes.
Revisaremos cuatro de las herramientas más populares para trabajar con APIs: Postman (interfaz gráfica para la mayoría de los desarrolladores), Insomnia (una alternativa moderna con una interfaz de usuario amigable), cURL (herramienta clásica de línea de comandos) y HTTPie (cliente CLI moderno con sintaxis legible). Para cada herramienta, proporcionaremos ejemplos de código y discutiremos las características de configuración.
Qué tipos de proxies son adecuados para trabajar con APIs
Antes de configurar un proxy en los clientes API, es importante entender qué tipo de proxy es adecuado para su tarea. Los clientes REST API admiten dos protocolos principales: HTTP/HTTPS y SOCKS5. La elección depende de los requisitos específicos de la API y del nivel de seguridad que necesite.
Los proxies HTTP/HTTPS funcionan a nivel del protocolo HTTP y son ideales para la mayoría de las solicitudes REST API. Comprenden la estructura del tráfico HTTP, pueden almacenar en caché las respuestas y modificar los encabezados. Los proxies HTTPS, además, cifran la conexión entre el cliente y el servidor proxy, lo cual es importante al transmitir datos sensibles, como claves API o tokens de autorización.
Los proxies SOCKS5 operan a un nivel más bajo y transmiten cualquier tipo de tráfico sin modificación. Son más lentos que los proxies HTTP, pero ofrecen mejor anonimato y son adecuados para situaciones en las que la API utiliza protocolos no estándar o se requiere total transparencia en la conexión. SOCKS5 también admite tráfico UDP, aunque esto rara vez es necesario para REST API.
Recomendación: Para trabajar con la mayoría de las APIs públicas (GitHub, Stripe, Twilio, Google Maps), un proxy HTTP/HTTPS es suficiente. Si la API bloquea solicitudes desde IPs de centros de datos, utilice proxies residenciales — tienen IPs de usuarios reales y son menos propensos a ser bloqueados.
| Tipo de proxy | Protocolo | Velocidad | Cuándo usar |
|---|---|---|---|
| Datacenter HTTP | HTTP/HTTPS | Muy alta | Pruebas, desarrollo, API sin restricciones geográficas |
| Residential HTTP | HTTP/HTTPS | Media | API con protección contra bots, geo-targeting |
| Mobile HTTP | HTTP/HTTPS | Media | API móviles, redes sociales |
| SOCKS5 | SOCKS5 | Baja | Máxima anonimidad, protocolos no estándar |
Configuración de proxy en Postman: configuraciones globales y locales
Postman es la herramienta gráfica más popular para trabajar con REST API, utilizada por millones de desarrolladores. Admite dos formas de configurar proxies: configuraciones globales (que se aplican a todas las solicitudes) y configuraciones a nivel de entorno. Analicemos ambas opciones en detalle.
Configuración global de proxy en Postman
Las configuraciones globales de proxy se encuentran en el menú Configuración (icono de engranaje en la esquina superior derecha). Este método es conveniente cuando desea que todas las solicitudes de Postman pasen siempre por el mismo servidor proxy. Instrucciones paso a paso:
- Abra Postman y haga clic en el icono de engranaje (Configuración) en la esquina superior derecha
- Vaya a la pestaña "Proxy"
- Active la opción "Agregar una configuración de proxy personalizada"
- Seleccione el tipo de proxy: HTTP, HTTPS o SOCKS5
- Ingrese la dirección del servidor proxy (por ejemplo:
proxy.example.com) - Especifique el puerto (generalmente 8080 para HTTP, 1080 para SOCKS5)
- Si el proxy requiere autenticación, active "Autenticación de Proxy" e ingrese usuario/contraseña
- Haga clic en "Guardar" y cierre la ventana de configuración
Después de esto, todas las solicitudes de Postman pasarán automáticamente por el proxy especificado. Una característica importante: Postman también envía telemetría y verifica actualizaciones a través del proxy, lo que puede generar tráfico adicional. Si está utilizando un proxy con tráfico limitado, esto debe tenerse en cuenta.
Configuración de proxy a través de variables de entorno
Un método más flexible es utilizar variables de entorno. Esto permite cambiar rápidamente entre diferentes proxies para diferentes proyectos o APIs. Cree un nuevo entorno y agregue las siguientes variables:
PROXY_HOST = proxy.example.com
PROXY_PORT = 8080
PROXY_USER = your_username
PROXY_PASS = your_password
Luego, en la configuración global de proxy, use estas variables en lugar de valores específicos: {{PROXY_HOST}} y {{PROXY_PORT}}. Ahora puede crear varios entornos (por ejemplo, "Proxy de Producción", "Proxy de Pruebas", "Proxy de EE. UU.") y cambiar entre ellos con un clic.
Uso del proxy del sistema
Postman también puede usar la configuración de proxy de su sistema operativo. Para ello, en la configuración de Proxy, seleccione la opción "Usar Proxy del Sistema". Esto es conveniente si ya ha configurado un proxy a nivel del sistema operativo (por ejemplo, a través de la configuración de Windows o macOS) y desea que Postman use la misma configuración que su navegador.
Importante: Al usar un proxy del sistema, Postman puede ignorar la configuración para localhost y 127.0.0.1. Si está probando una API local a través de un proxy, utilice una configuración personalizada en lugar de la del sistema.
Configuración de proxy en Insomnia
Insomnia es una alternativa moderna a Postman con una interfaz limpia y código abierto. La configuración de proxy en Insomnia es un poco diferente de Postman y requiere editar el archivo de configuración o usar variables de entorno. Analicemos ambos métodos.
Configuración a través de variables de entorno
La forma más sencilla de configurar un proxy en Insomnia es utilizar las variables de entorno estándar HTTP_PROXY y HTTPS_PROXY. Insomnia lee automáticamente estas variables del sistema. Establezca estas variables antes de iniciar Insomnia:
Linux/macOS:
export HTTP_PROXY="http://username:password@proxy.example.com:8080"
export HTTPS_PROXY="http://username:password@proxy.example.com:8080"
insomnia
Windows (PowerShell):
$env:HTTP_PROXY = "http://username:password@proxy.example.com:8080"
$env:HTTPS_PROXY = "http://username:password@proxy.example.com:8080"
insomnia
Tenga en cuenta el formato de URL: incluso para proxies HTTPS, se utiliza el esquema http://, no https://. Este es el acuerdo estándar para las variables de entorno de proxy. Si el proxy no requiere autenticación, la URL será más corta: http://proxy.example.com:8080.
Configuración de proxy SOCKS5
Para proxies SOCKS5, use la variable de entorno ALL_PROXY:
export ALL_PROXY="socks5://username:password@proxy.example.com:1080"
Insomnia admite SOCKS5, pero no todas las versiones manejan correctamente la autenticación SOCKS5. Si tiene problemas con SOCKS5 autenticado, intente usar un proxy HTTP o actualice Insomnia a la última versión.
Configuración a través del archivo de configuración
Para una configuración de proxy permanente, puede editar el archivo de configuración de Insomnia. La ubicación del archivo depende del sistema operativo:
- Windows:
%APPDATA%\Insomnia\config.json - macOS:
~/Library/Application Support/Insomnia/config.json - Linux:
~/.config/Insomnia/config.json
Abra el archivo en un editor de texto y agregue la sección proxy:
{
"proxy": {
"http": "http://username:password@proxy.example.com:8080",
"https": "http://username:password@proxy.example.com:8080"
}
}
Después de editar, reinicie Insomnia. La configuración de proxy se aplicará automáticamente a todas las solicitudes.
Uso de proxies en cURL: ejemplos de comandos
cURL es una herramienta clásica de línea de comandos para trabajar con HTTP, que está instalada en prácticamente todos los sistemas Unix y Windows 10+. Admite proxies a través del parámetro -x o --proxy. Analicemos diferentes escenarios de uso.
Uso básico de un proxy HTTP
Un ejemplo simple de uso de un proxy HTTP sin autenticación:
curl -x http://proxy.example.com:8080 https://api.example.com/users
El parámetro -x indica la dirección y el puerto del servidor proxy. cURL determinará automáticamente que se trata de un proxy HTTP y configurará la conexión. Si desea especificar explícitamente el protocolo, use la URL completa:
curl --proxy http://proxy.example.com:8080 https://api.example.com/users
Proxy con autenticación
Si el proxy requiere autenticación con usuario y contraseña, agréguelo a la URL del proxy o use el parámetro -U:
# Método 1: usuario y contraseña en la URL
curl -x http://username:password@proxy.example.com:8080 https://api.example.com/users
# Método 2: parámetro -U (más seguro, no se guarda en el historial de comandos)
curl -x http://proxy.example.com:8080 -U username:password https://api.example.com/users
El segundo método es preferible, ya que el usuario y la contraseña no se guardarán en el historial de comandos de la terminal. Para mayor seguridad, puede especificar solo el usuario, y cURL solicitará la contraseña interactivamente:
curl -x http://proxy.example.com:8080 -U username https://api.example.com/users
# cURL solicitará la contraseña: Enter proxy password for user 'username':
Uso de un proxy SOCKS5
Para un proxy SOCKS5, especifique explícitamente el protocolo en la URL:
# SOCKS5 sin autenticación
curl -x socks5://proxy.example.com:1080 https://api.example.com/users
# SOCKS5 con autenticación
curl -x socks5://username:password@proxy.example.com:1080 https://api.example.com/users
# SOCKS5h (resolución DNS a través del proxy)
curl -x socks5h://proxy.example.com:1080 https://api.example.com/users
La diferencia entre socks5:// y socks5h://: en el primer caso, la resolución DNS ocurre localmente (en su máquina), en el segundo, a través del servidor proxy. Use socks5h:// si desea ocultar completamente las consultas DNS de su proveedor.
Solicitudes POST a través de un proxy
El proxy funciona de la misma manera para todos los métodos HTTP. Ejemplo de una solicitud POST con datos JSON a través de un proxy:
curl -x http://proxy.example.com:8080 \
-X POST \
-H "Content-Type: application/json" \
-d '{"name":"John","email":"john@example.com"}' \
https://api.example.com/users
Para enviar archivos, use el parámetro -F:
curl -x http://proxy.example.com:8080 \
-X POST \
-F "file=@document.pdf" \
-F "description=Important document" \
https://api.example.com/upload
Uso de variables de entorno
En lugar de especificar el proxy en cada comando, puede usar variables de entorno. cURL lee automáticamente http_proxy, https_proxy y all_proxy:
# Establecer variables de entorno
export http_proxy="http://username:password@proxy.example.com:8080"
export https_proxy="http://username:password@proxy.example.com:8080"
# Ahora todos los comandos cURL utilizan automáticamente el proxy
curl https://api.example.com/users
# Desactivar el proxy para un comando específico
curl --noproxy "*" https://api.example.com/users
El parámetro --noproxy permite excluir ciertos dominios de la proxy. Por ejemplo, para no usar un proxy para localhost y dominios internos:
export no_proxy="localhost,127.0.0.1,.internal.company.com"
Configuración de proxy en HTTPie
HTTPie es una alternativa moderna a cURL con una sintaxis legible y salida en color. Es especialmente conveniente para trabajar interactivamente con APIs en la terminal. HTTPie admite proxies a través del parámetro --proxy o variables de entorno.
Uso básico de un proxy
La sintaxis de HTTPie para proxies es un poco diferente de cURL. Debe especificar el protocolo y la URL del proxy por separado:
# Proxy HTTP
http --proxy=http:http://proxy.example.com:8080 \
--proxy=https:http://proxy.example.com:8080 \
GET https://api.example.com/users
# Forma abreviada (si el proxy es el mismo para HTTP y HTTPS)
http --proxy=all:http://proxy.example.com:8080 GET https://api.example.com/users
Formato: --proxy=protocol:proxy_url. Para solicitudes HTTPS, generalmente se utiliza un proxy HTTP (no HTTPS), este es el comportamiento estándar.
Proxy con autenticación
Para la autenticación, agregue el usuario y la contraseña en la URL del proxy:
http --proxy=all:http://username:password@proxy.example.com:8080 \
GET https://api.example.com/users
HTTPie también admite el parámetro --proxy-auth para especificar más claramente las credenciales, pero en las últimas versiones este parámetro se considera obsoleto y se recomienda incluir la autenticación en la URL.
Proxies SOCKS5 en HTTPie
HTTPie admite proxies SOCKS5 a partir de la versión 2.0.0. Asegúrese de tener la versión actual:
# Verificar la versión de HTTPie
http --version
# Actualizar HTTPie a través de pip
pip install --upgrade httpie
# Usar un proxy SOCKS5
http --proxy=all:socks5://proxy.example.com:1080 GET https://api.example.com/users
Para SOCKS5 con autenticación, será necesario instalar la biblioteca adicional pysocks:
pip install pysocks
http --proxy=all:socks5://username:password@proxy.example.com:1080 \
GET https://api.example.com/users
Solicitudes POST y envío de datos
HTTPie tiene una sintaxis conveniente para solicitudes POST. Ejemplo de envío de JSON a través de un proxy:
# POST con JSON (HTTPie determina automáticamente el Content-Type)
http --proxy=all:http://proxy.example.com:8080 \
POST https://api.example.com/users \
name="John Doe" \
email="john@example.com" \
age:=30
# Envío de archivo
http --proxy=all:http://proxy.example.com:8080 \
POST https://api.example.com/upload \
file@document.pdf \
description="Important document"
Tenga en cuenta la sintaxis: key=value para cadenas, key:=value para números y valores booleanos, key@file para archivos.
Uso de variables de entorno
Al igual que cURL, HTTPie lee las variables de entorno estándar http_proxy y https_proxy:
export http_proxy="http://username:password@proxy.example.com:8080"
export https_proxy="http://username:password@proxy.example.com:8080"
# Ahora todos los comandos utilizan automáticamente el proxy
http GET https://api.example.com/users
Para desactivar temporalmente el proxy, use el parámetro --proxy= (valor vacío):
http --proxy= GET https://api.example.com/users
Autenticación de proxy: usuario y contraseña
La mayoría de los servicios de proxy comerciales requieren autenticación para protegerse contra el uso no autorizado. Existen dos métodos principales de autenticación: Autenticación Básica (usuario/contraseña) y Lista Blanca de IP (vinculación a la dirección IP). Analicemos las características de cada método y cómo configurarlos correctamente en los clientes API.
Autenticación Básica (usuario y contraseña)
La Autenticación Básica es el método más común. El servidor proxy solicita un usuario y una contraseña en cada conexión. Las credenciales se envían en el encabezado Proxy-Authorization en formato Base64. Todos los clientes API modernos generan automáticamente este encabezado si especifica el usuario y la contraseña en la URL del proxy.
Formato de URL con autenticación:
protocol://username:password@proxy_host:proxy_port
Ejemplos para diferentes protocolos:
# Proxy HTTP
http://user123:pass456@proxy.example.com:8080
# Proxy HTTPS (se utiliza el mismo formato)
http://user123:pass456@proxy.example.com:8080
# Proxy SOCKS5
socks5://user123:pass456@proxy.example.com:1080
Seguridad: Nunca guarde contraseñas de proxy en texto plano en scripts o archivos de configuración que se incluyan en el control de versiones (Git). Utilice variables de entorno o archivos con permisos restringidos (chmod 600).
Lista Blanca de IP (vinculación a IP)
Algunos proveedores de proxy ofrecen autenticación por dirección IP. En este caso, agrega su IP a la lista blanca en el panel de control del proxy, y el servidor permite conexiones solo desde esa IP sin usuario y contraseña. Esto es más conveniente y seguro, ya que no es necesario transmitir credenciales en cada solicitud.
Al usar la Lista Blanca de IP, el formato de la URL del proxy se simplifica:
# Sin usuario y contraseña
http://proxy.example.com:8080
# Ejemplo en cURL
curl -x http://proxy.example.com:8080 https://api.example.com/users
La desventaja de este método es que si su IP es dinámica (cambia al reconectarse a Internet), deberá actualizar la lista blanca cada vez. Para servidores con IP estática, esta es la opción ideal.
Caracteres especiales en la contraseña
Si la contraseña del proxy contiene caracteres especiales (@, :, /, ?), deben codificarse en formato de URL (percent encoding). Por ejemplo:
| Símbolo | Codificación URL | Ejemplo |
|---|---|---|
| @ | %40 | pass@123 → pass%40123 |
| : | %3A | pass:word → pass%3Aword |
| / | %2F | pass/123 → pass%2F123 |
| ? | %3F | pass?123 → pass%3F123 |
| # | %23 | pass#123 → pass%23123 |
| espacio | %20 | my pass → my%20pass |
Ejemplo de uso de una contraseña con caracteres especiales:
# Contraseña original: P@ss:w0rd/123
# Contraseña codificada: P%40ss%3Aw0rd%2F123
curl -x http://username:P%40ss%3Aw0rd%2F123@proxy.example.com:8080 \
https://api.example.com/users
Para la codificación automática, puede usar herramientas en línea de codificación de URL o el comando en Python:
python3 -c "import urllib.parse; print(urllib.parse.quote('P@ss:w0rd/123'))"
# Salida: P%40ss%3Aw0rd%2F123
Solución de problemas comunes y errores
Al trabajar con proxies en clientes API, a menudo surgen errores comunes. Analicemos los problemas más frecuentes y cómo resolverlos.
Error "407 Proxy Authentication Required"
Este error significa que el servidor proxy requiere autenticación, pero las credenciales no se han proporcionado o son incorrectas. Soluciones:
- Verifique la precisión del usuario y la contraseña en el panel de control del proveedor de proxy
- Asegúrese de que los caracteres especiales en la contraseña estén codificados (consulte la sección anterior)
- Verifique el formato de la URL:
http://username:password@host:port - Si utiliza la Lista Blanca de IP, asegúrese de que su IP actual esté agregada a la lista blanca
Ejemplo de diagnóstico en cURL con salida detallada:
curl -v -x http://username:password@proxy.example.com:8080 https://api.example.com/users
# La bandera -v (verbose) mostrará todos los encabezados y el proceso de autenticación
Error "Connection timeout" o "Failed to connect"
Este error ocurre cuando el cliente API no puede establecer una conexión con el servidor proxy. Posibles causas:
- Dirección o puerto del servidor proxy incorrectos: verifique la configuración con el proveedor
- El servidor proxy no está disponible o está sobrecargado: intente con otro servidor de la lista
- Su firewall bloquea conexiones salientes al puerto del proxy
- El proveedor de proxy ha bloqueado su IP por exceder los límites
Para diagnóstico, intente conectarse al proxy directamente a través de telnet o nc:
# Verificar la disponibilidad del proxy
telnet proxy.example.com 8080
# o
nc -zv proxy.example.com 8080
# Si no se establece la conexión, el problema está en la red o el servidor proxy no está disponible
Error "SSL certificate problem"
Al usar proxies HTTPS, pueden surgir problemas con la verificación de certificados SSL. Esto es especialmente relevante para proxies MITM (Man-in-the-Middle) que interceptan y descifran el tráfico HTTPS. Soluciones:
- En cURL, use la bandera
-ko--insecurepara desactivar la verificación del certificado (¡solo para pruebas!) - En Postman, desactive "Verificación del certificado SSL" en Configuración → General
- Instale el certificado raíz del proxy en el sistema (para entornos de producción)
# Desactivar la verificación del certificado SSL en cURL
curl -k -x http://proxy.example.com:8080 https://api.example.com/users
Mejores prácticas para trabajar con proxies en clientes API
Para garantizar una experiencia fluida al trabajar con proxies en clientes API, considere las siguientes mejores prácticas:
- Siempre use proxies seguros (HTTPS) cuando trabaje con datos sensibles.
- Mantenga sus credenciales de proxy seguras y nunca las comparta en el código fuente.
- Utilice variables de entorno para almacenar configuraciones de proxy, evitando así la exposición de credenciales en el código.
- Realice pruebas exhaustivas de la configuración del proxy antes de implementar en producción.
- Considere el uso de herramientas de monitoreo para rastrear el rendimiento y los problemas de conexión del proxy.
Conclusión
Configurar proxies en clientes REST API es una habilidad esencial para desarrolladores que buscan garantizar la seguridad y la flexibilidad en sus pruebas y desarrollos. Siguiendo las pautas y mejores prácticas descritas en esta guía, podrá evitar errores comunes y optimizar su flujo de trabajo al interactuar con APIs a través de proxies.