Respuesta rápida
¿Cómo uso un proxy con curl?
Usa curl -x http://USERNAME:[email protected]:7777 https://api.ipify.org para proxy HTTP, o --socks5-hostname gw.crawlrelay.com:7778 con -U USERNAME:PASSWORD para SOCKS5. CrawlRelay proxies residenciales toman país y sesión pegajosa en el usuario, como USERNAME-country-de-session-t1-ttl-10. Desde 0,50 US$/GB. Pago en cripto, sin KYC.
Opciones curl que necesitas
-x / --proxy | URL del proxy: http://host:port, credenciales opcionales dentro |
|---|---|
-U / --proxy-user | Credenciales del proxy como USERNAME:PASSWORD, fuera de la URL |
--socks5-hostname | Proxy SOCKS5 con DNS resuelto en la salida |
-v | Muestra el intercambio CONNECT y la línea de estado del proxy |
-w | Imprime el tiempo, tamaño y %{http_connect}, el estado CONNECT del proxy |
--max-time, --connect-timeout | Límites totales y de conexión, en segundos |
¿Cuáles son los comandos básicos para proxies?
Cada uno de estos muestra la IP de salida que ve la web.
# Rotating exit, any country
curl -x http://gw.crawlrelay.com:7777 -U USERNAME:PASSWORD https://api.ipify.org
# Country and city (city availability varies)
curl -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us-city-chicago:PASSWORD https://api.ipify.org
# Sticky: run it twice, the IP stays the same for up to 10 minutes (it can change earlier)
curl -x http://gw.crawlrelay.com:7777 -U USERNAME-country-de-session-t1-ttl-10:PASSWORD https://api.ipify.org
# SOCKS5, DNS resolved at the exit
curl --socks5-hostname gw.crawlrelay.com:7778 -U USERNAME-country-gb:PASSWORD https://api.ipify.org¿Cómo depuro una conexión proxy con curl?
Ejecuta con -v y lee las líneas alrededor de CONNECT. Un túnel funcionando muestra HTTP/1.1 200 Connection established, luego el apretón de manos TLS con la web. Cualquier otro estado en esa línea viene del proxy: 407 significa credenciales, 502 o 504 indica salida o destino. El formato -w abajo imprime la misma info en una línea, útil para loops y pruebas CI.
# Full exchange, including the proxy's answer to CONNECT
curl -v -x http://gw.crawlrelay.com:7777 -U USERNAME:PASSWORD https://example.com/ -o /dev/null
# One line: proxy CONNECT status, HTTP status, compressed bytes and timings
curl -s --compressed -o /dev/null -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us:PASSWORD \
-w 'connect=%{http_connect} http=%{http_code} bytes=%{size_download} tcp=%{time_connect}s tls=%{time_appconnect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n' \
https://example.com/¿Cómo verifico que rotation y sesiones funcionan?
Pide la IP varias veces. Sin ID de sesión, cada ejecución es nueva conexión y suele mostrar IP diferente. Con ID, la IP se mantiene hasta que expire el TTL, aunque puede cambiar antes.
echo "rotating:"
for i in 1 2 3 4 5; do
curl -s -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us:PASSWORD https://api.ipify.org; echo
done
echo "sticky:"
for i in 1 2 3 4 5; do
curl -s -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us-session-loop1-ttl-5:PASSWORD https://api.ipify.org; echo
done¿Cómo uso curl con un proxy en Windows?
Usa curl.exe, no curl. En PowerShell 5.1, curl es alias de Invoke-WebRequest, que no entiende -x ni -U. Windows 10 y 11 traen el curl real como curl.exe. En PowerShell, pon entre comillas argumentos con caracteres especiales y escribe $ literal en la contraseña con comillas simples.
curl.exe -x http://gw.crawlrelay.com:7777 -U 'USERNAME-country-fr:PASSWORD' https://api.ipify.org¿Cómo configuro el proxy una vez para todos los comandos?
curl lee las variables de entorno https_proxy y http_proxy, muchas otras herramientas también. Configúralas en la sesión shell y usa NO_PROXY para hosts que no deben pasar por el proxy, como tu API. Evita poner la contraseña en variable exportada a procesos hijos en máquinas compartidas.
export https_proxy="http://USERNAME-country-us:[email protected]:7777"
export http_proxy="$https_proxy"
export NO_PROXY="localhost,127.0.0.1,.internal.example"
curl https://api.ipify.org # now uses the proxy
unset https_proxy http_proxy # back to directcurl y proxies: preguntas
¿Cuál es la diferencia entre --socks5 y --socks5-hostname?
Con --socks5, curl resuelve el hostname en tu máquina y manda la IP al proxy. Con --socks5-hostname, manda el hostname y lo resuelve el proxy. Usa --socks5-hostname para scraping para que las respuestas DNS coincidan con el país de salida y tu resolver local no vea los dominios que buscas.
¿Por qué curl dice 'CONNECT tunnel failed, response 407'?
El proxy rechazó credenciales o no recibió ninguna. Revisa usuario y contraseña, y codifica caracteres especiales en URL si están en -x o pásalos con -U. La página 407 lista causas adicionales.
¿Cómo veo cuántos bytes consume una página vía proxy?
Agrega --compressed -o /dev/null -w '%{size_download}\n'. --compressed hace que curl pida gzip o brotli como tu scraper, y %{size_download} cuenta los bytes comprimidos transmitidos. Sin eso, el servidor envía la página sin comprimir y puede ser varias veces más grande. Prueba en varias páginas reales para estimar tráfico por 1,000 páginas.
¿Puede curl usar HTTP/2 o HTTP/3 a través del proxy?
HTTP/2 funciona dentro del túnel CONNECT si la web lo soporta, porque el túnel lleva TLS de extremo a extremo. HTTP/3 usa UDP, que un túnel CONNECT por proxy HTTP no transporta, usa HTTP/2 o HTTP/1.1 vía la puerta de enlace.
Prueba tus objetivos desde la línea de comandos
1,50 US$ para 1 GB, suficiente para miles de pruebas con curl.