Socks5Proxy

Uso de proxies con cURL, verificación de proxies HTTP y SOCKS5 desde la línea de comandos

Esta guía explica cómo conectar el proxy HTTP y SOCKS5 de Socks5Proxy con cURL, autenticación con username y password, medición del tiempo de respuesta y un script de shell para verificar toda la lista de una vez.

¿Por qué es bueno probar proxies con cURL?

cURL está instalado en casi todos los servidores y entornos de desarrollo, por lo que es la herramienta más rápida para verificar si un proxy funciona correctamente. Si encuentras problemas en el código o la configuración del navegador, probar la misma línea con cURL te permite distinguir si es un problema del proxy o del código.

El ejemplo usa IP 198.51.100.23, puerto HTTP 8000, puerto SOCKS5 1080, usuario spx_user, contraseña spx_pass.

¿Cómo me conecto a un proxy HTTP?

Usa la opción -x (o --proxy) para especificar la dirección del proxy. Puedes incluir el usuario y la contraseña en la dirección o usar la opción -U para agregarlos por separado. Al solicitar una dirección HTTPS, cURL crea un túnel CONNECT y realiza la solicitud cifrada dentro de él.

# user and password inside the proxy URL
curl -x http://spx_user:spx_pass@198.51.100.23:8000 https://api.ipify.org

# or with -U
curl -x http://198.51.100.23:8000 -U spx_user:spx_pass https://api.ipify.org

¿Cómo conectar un proxy SOCKS5?

--socks5-hostname resuelve los nombres de dominio a través del proxy. Las solicitudes DNS de tu servidor no se exponen externamente y los nombres se resuelven según el país del proxy. --socks5 resuelve los nombres localmente y solo envía la IP al proxy. En la mayoría de los casos, recomendamos --socks5-hostname.

El formato socks5h:// con -x da el mismo resultado.

# DNS is resolved by the proxy
curl --socks5-hostname 198.51.100.23:1080 --proxy-user spx_user:spx_pass https://api.ipify.org

# same thing with a proxy URL
curl -x socks5h://spx_user:spx_pass@198.51.100.23:1080 https://api.ipify.org

¿Cómo ver el tiempo de respuesta y el estado juntos?

Con la opción -w puedes mostrar en una línea el tiempo de conexión, el tiempo hasta el primer byte, el tiempo total y el código de respuesta. Es útil para comparar la velocidad de proxies en diferentes países o determinar si el problema es del sitio o del proxy.

Con -o /dev/null descartas el cuerpo y con -s desactivas la barra de progreso, mostrando solo el resultado de manera limpia.

curl -s -o /dev/null \
  -x http://spx_user:spx_pass@198.51.100.23:8000 \
  -w "code=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
  https://example.com/

¿Cómo verificar toda la lista de una vez?

Puedes ejecutar cURL para cada línea de una lista obtenida por API y verificar el estado de todos los proxies a la vez. Este script recibe una lista en formato ip:port:user:pass y muestra la IP de respuesta y el tiempo de cada línea, con un límite de tiempo para evitar bloqueos en líneas sin respuesta.

#!/bin/sh
KEY="YOUR_API_KEY"
curl -s -H "Authorization: Bearer $KEY" \
  "https://socks5proxy.io/api/v1/proxies/download?format=ip:port:user:pass&protocol=http" > proxies.txt

while IFS=: read -r ip port user pass; do
  out=$(curl -s -m 15 -x "http://$user:$pass@$ip:$port" -w " %{time_total}s" https://api.ipify.org)
  echo "$ip:$port $out"
done < proxies.txt

¿Se puede llamar a la API directamente con cURL?

Sí. Verificar saldo, listar planes activos y proxies, todo con un solo header Authorization: Bearer. Las respuestas JSON pueden filtrarse con herramientas como jq para ver solo los campos necesarios.

curl -H "Authorization: Bearer YOUR_API_KEY" https://socks5proxy.io/api/v1/account
curl -H "Authorization: Bearer YOUR_API_KEY" "https://socks5proxy.io/api/v1/proxies?country=us&protocol=socks5"

¿También se puede configurar el proxy mediante variables de entorno?

Sí. cURL y muchas herramientas de línea de comandos leen las variables de entorno http_proxy, https_proxy y all_proxy. Configurándolas una vez en la shell, herramientas como cURL, wget y pip usan el mismo proxy. Para SOCKS5, usa socks5h:// en all_proxy.

Lista las direcciones que NO deben usar proxy en no_proxy (separadas por comas). Evita redirigir servidores internos o localhost a través del proxy.

export https_proxy="http://spx_user:spx_pass@198.51.100.23:8000"
export http_proxy="$https_proxy"
export no_proxy="localhost,127.0.0.1"
curl https://api.ipify.org

# SOCKS5 for every tool that reads all_proxy
export all_proxy="socks5h://spx_user:spx_pass@198.51.100.23:1080"

¿Cómo comparo los resultados de un proxy HTTP y un proxy SOCKS5?

Compara puertos HTTP/SOCKS5 de un mismo IP para determinar qué protocolo es más rápido en tu entorno (varía con distancia y DNS).

La IP de respuesta debe ser la misma en ambos métodos. Si aparece diferente, es posible que hayas mezclado puertos de diferentes líneas, así que revisa la lista nuevamente.

for p in "http://spx_user:spx_pass@198.51.100.23:8000" "socks5h://spx_user:spx_pass@198.51.100.23:1080"; do
  curl -s -m 15 -x "$p" -w "  %{time_total}s\n" https://api.ipify.org
done

¿Cómo verifica el servidor las IPs para autorización IP?

El valor para registrar en la autorización por IP es la IPv4 pública que usa tu servidor para conectarse a Internet. Puedes verificarlo ejecutando curl -4 https://api.ipify.org sin proxy. Registra este valor en el campo de autorización por IP del dashboard para que ese servidor se conecte sin nombre de usuario ni contraseña.

curl -4 -s https://api.ipify.org

¿Puede el proxy ver el contenido de los sitios HTTPS?

Cuando se solicita una dirección HTTPS a través de un proxy HTTP, cURL primero crea un túnel CONNECT al servidor de destino y luego establece una conexión cifrada directamente con él. El proxy solo sabe a qué servidor conectarse, pero el contenido que se intercambia está cifrado y no puede ser visto. Ejecutar con la opción -v muestra el proceso CONNECT y la conexión cifrada posterior.

Lo mismo aplica para SOCKS5. El proxy solo reenvía la conexión, el cifrado ocurre entre cURL y el servidor destino. Es más seguro no usar la opción -k, ya que el certificado del servidor se verifica igualmente a través del proxy.

Al usar --socks5-hostname, el proxy también resuelve el nombre de dominio al que te conectas, por lo que no queda registro de las solicitudes DNS en tu servidor.

curl -v -o /dev/null -x http://spx_user:spx_pass@198.51.100.23:8000 https://example.com/ 2>&1 | grep -E "CONNECT|HTTP/|SSL connection"

¿Cómo leer los mensajes de error de cURL?

El código HTTP 407 del proxy tras CONNECT indica fallo de autenticación. Verifica usuario/contraseña o las IPs registradas en la autenticación por IP. Si la contraseña contiene @ o :, no la incluyas en la URL; usa -U o --proxy-user.

Failed to connect o Connection timed out ocurre cuando el puerto no coincide o el firewall del servidor bloquea la conexión saliente. Usa el puerto HTTP para direcciones HTTP y el puerto SOCKS5 para SOCKS5, y asegúrate de que el puerto saliente esté abierto. La opción -v muestra el proceso de conexión paso a paso, facilitando la identificación de la causa.

Uso de proxies con cURL, verificación de conexión SOCKS5 y opción -x | Socks5Proxy