Szybka odpowiedź
Jak użyć proxy z curl?
Użyj curl -x http://USERNAME:[email protected]:7777 https://api.ipify.org dla proxy HTTP lub --socks5-hostname gw.crawlrelay.com:7778 z -U USERNAME:PASSWORD dla SOCKS5. CrawlRelay to proxy rezydencjalne z krajem i sticky session w nazwie użytkownika, np. USERNAME-country-de-session-t1-ttl-10. Od 0,50 USD/GB. Płatne kryptowalutą, bez KYC.
flaggi curl, które potrzebujesz
-x / --proxy | URL proxy: http://host:port, poświadczenia opcjonalne w URL |
|---|---|
-U / --proxy-user | Poświadczenia proxy jako USERNAME:PASSWORD, trzymane poza URL |
--socks5-hostname | Proxy SOCKS5 z DNS rozwiązywanym na wyjściu |
-v | Wyświetla wymianę CONNECT oraz status proxy |
-w | Wyświetla czas, rozmiar i %{http_connect}, status CONNECT proxy |
--max-time, --connect-timeout | Całkowite i limit czasu połączenia, w sekundach |
Jakie są podstawowe polecenia dla proxy?
Każde z nich wyświetla IP wyjściowe widoczne dla strony.
# 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.orgJak debugować połączenie proxy za pomocą curl?
Uruchom z -v i czytaj linie wokół CONNECT. Działający tunel pokazuje HTTP/1.1 200 Connection established, następnie handshake TLS ze stroną. Każdy inny status na tej linii pochodzi od proxy: 407 oznacza konieczność podania danych uwierzytelniających, 502 lub 504 oznacza problemy z wyjściem lub celem. Format -w poniżej wyświetla te same informacje w jednej linii, co jest wygodne w pętlach i testach 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/Jak sprawdzić, czy rotacja i sesje działają?
Wykonaj kilka żądań IP. Bez ID sesji każde wykonanie to nowe połączenie i zwykle inne IP. Z ID sesji IP powinno pozostać to samo aż do wygaśnięcia TTL, ale może zmienić się wcześniej.
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
doneJak korzystać z curl z proxy na Windows?
Wywołaj curl.exe, a nie curl. W Windows PowerShell 5.1, curl to alias dla Invoke-WebRequest, który nie rozumie -x ani -U. Windows 10 i 11 mają prawdziwe curl jako curl.exe. W PowerShellu argumenty ze znakami specjalnymi umieszczaj w cudzysłowie, a dosłowny znak $ w haśle wpisuj w pojedynczych cudzysłowach.
curl.exe -x http://gw.crawlrelay.com:7777 -U 'USERNAME-country-fr:PASSWORD' https://api.ipify.orgJak ustawić proxy raz na wszystkie polecenia?
curl czyta zmienne środowiskowe https_proxy i http_proxy, podobnie wiele innych narzędzi. Ustaw je dla sesji shell, a NO_PROXY dla hostów, które nie powinny korzystać z proxy, np. własne API. Unikaj umieszczania hasła w zmiennej eksportowanej do wszystkich procesów potomnych na współdzielonym urządzeniu.
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 i proxy: pytania
Jaka jest różnica między --socks5 i --socks5-hostname?
Przy --socks5 curl rozwiązuje nazwę hosta lokalnie i wysyła IP do proxy. Przy --socks5-hostname wysyła nazwę hosta, a proxy rozwiązuje ją po swojej stronie. Używaj --socks5-hostname do scrapowania, aby odpowiedzi DNS pasowały do kraju wyjścia, a lokalny resolver nie widział pobieranych domen.
Dlaczego curl wyświetla 'CONNECT tunnel failed, response 407'?
Proxy odrzuciło dane uwierzytelniające lub ich nie otrzymało. Sprawdź nazwę użytkownika i hasło, zakoduj znaki specjalne w URL -x lub przekaż je przez -U. Strona 407 wymienia inne przyczyny.
Jak sprawdzić, ile bajtów kosztuje strona przez proxy?
Dodaj --compressed -o /dev/null -w '%{size_download}\n'. --compressed powoduje, że curl prosi o gzip lub brotli jak twój scraper, a %{size_download} liczy skompresowane bajty przesłane przez sieć. Bez tego serwer wysyła stronę nieskompresowaną i liczba może być wielokrotnie wyższa. Przetestuj na kilku prawdziwych stronach, by oszacować ruch na 1000 stron.
Czy curl może używać HTTP/2 lub HTTP/3 przez proxy?
HTTP/2 działa w tunelu CONNECT, jeśli strona to obsługuje, bo tunel przenosi TLS end-to-end. HTTP/3 działa na UDP, którego CONNECT przez proxy HTTP nie przenosi, więc użyj HTTP/2 lub HTTP/1.1.
Testuj cele z poziomu konsoli
1,50 USD dla 1 GB, wystarczająco dla tysięcy testów curl.