Jak używać proxy w cURL, sprawdzanie HTTP i SOCKS5 proxy z wiersza poleceń
Ten przewodnik pokazuje, jak podłączyć HTTP i SOCKS5 proxy Socks5Proxy w cURL, uwierzytelnianie loginem i hasłem, pomiar czasu odpowiedzi oraz skrypt sprawdzający całą listę.
Dlaczego warto testować proxy z cURL?
cURL jest zainstalowany na prawie każdym serwerze i środowisku developerskim, co czyni go najszybszym narzędziem do sprawdzenia, czy proxy działa poprawnie. Gdy wystąpi problem w kodzie lub ustawieniach przeglądarki, testowanie tej samej linii w cURL pomaga odróżnić problemy z proxy od problemów z kodem.
Przykładowe dane: IP 198.51.100.23, port HTTP 8000, port SOCKS5 1080, nazwa użytkownika spx_user, hasło spx_pass.
Jak połączyć się z proxy HTTP?
Wprowadź adres proxy w opcji -x (lub --proxy). Nazwę użytkownika i hasło można wprowadzić w adresie lub osobno za pomocą opcji -U. Jeśli zażądasz adresu HTTPS, cURL utworzy tunel CONNECT i wysyła zaszyfrowane żądanie wewnątrz niego.
# 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.orgJak połączyć się z proxy SOCKS5?
--socks5-hostname rozpoznaje nazwy domen po stronie proxy. Żądania DNS z Twojego serwera nie są widoczne na zewnątrz, a nazwy są rozpoznawane zgodnie z krajem, w którym znajduje się proxy. --socks5 rozpoznaje nazwy na Twoim serwerze, a następnie wysyła tylko IP do proxy. W większości przypadków zalecamy użycie --socks5-hostname.
Format adresu socks5h:// daje ten sam wynik, gdy jest używany z -x.
# 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.orgJak sprawdzić czas odpowiedzi i status jednocześnie?
Opcja -w pozwala wyświetlić czas połączenia, czas do pierwszego bajtu, całkowity czas i kod odpowiedzi w jednej linii. Przydaje się do porównywania prędkości proxy z różnych krajów lub do sprawdzenia, czy strona docelowa jest wolna, czy proxy jest wolne.
Użyj -o /dev/null, aby odrzucić treść, i -s, aby wyłączyć pasek postępu, aby wyświetlić tylko wynik w czystej postaci.
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/Jak sprawdzić całą listę na raz?
Pobierając listę przez API i wykonując cURL dla każdej linii, możesz jednocześnie sprawdzić stan wszystkich proxy. Poniższy skrypt pobiera listę w formacie ip:port:user:pass i wyświetla adres IP odpowiedzi oraz czas dla każdej linii. Dodano limit czasu, aby skrypt nie zatrzymywał się na liniach bez odpowiedzi.
#!/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.txtCzy można wywołać API za pomocą cURL?
Tak. Saldo, lista aktywnych planów i lista proxy są dostępne z nagłówkiem Authorization: Bearer. Odpowiedzi JSON można filtrować narzędziami takimi jak jq.
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"Czy można skonfigurować proxy za pomocą zmiennych środowiskowych?
Tak. cURL i wiele narzędzi wiersza poleceń odczytuje zmienne środowiskowe http_proxy, https_proxy i all_proxy. Ustawiając je w powłoce, wszystkie narzędzia uruchamiane w tej powłoce (cURL, wget, pip itp.) będą używać tego samego proxy. Dla SOCKS5 w all_proxy należy podać adres w formacie socks5h://.
Adresy, które nie powinny przechodzić przez proxy, wpisz w no_proxy oddzielone przecinkami. Możesz zapobiec przekierowaniu wewnętrznych serwerów lub localhost przez 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"Jak porównać wyniki proxy HTTP i SOCKS5?
Wysłanie żądania do tego samego adresu przez oba porty tego samego IP i porównanie czasu odpowiedzi pokaże, która metoda jest szybsza w Twoim środowisku. Różnice mogą wystąpić przy odległych serwerach lub wolnych DNS.
IP odpowiedzi powinno być takie samo w obu metodach. Jeśli różni się, sprawdź listę, czy przypadkiem nie mieszałeś portów z różnych linii.
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
doneJak serwer weryfikuje adresy IP do autoryzacji IP?
Wartość do rejestracji w uwierzytelnianiu IP to publiczny IPv4, z którego Twój serwer wychodzi do internetu. Możesz to sprawdzić, wykonując curl -4 https://api.ipify.org bez proxy. Zarejestruj tę wartość w polu uwierzytelniania IP w dashboardzie, aby połączyć się bez nazwy użytkownika i hasła z tego serwera.
curl -4 -s https://api.ipify.orgCzy proxy może zobaczyć treść witryn HTTPS?
Gdy żądanie HTTPS jest wysyłane przez proxy HTTP, cURL najpierw tworzy tunel CONNECT do docelowego serwera, a następnie nawiązuje bezpośrednie zaszyfrowane połączenie z docelowym serwerem. Proxy wie tylko, z którym serwerem się łączyć, a przesyłane dane są zaszyfrowane i niewidoczne. Uruchomienie z opcją -v pokazuje etap CONNECT i kolejne kroki zaszyfrowanego połączenia.
SOCKS5 działa podobnie. Proxy przekazuje połączenie, a szyfrowanie odbywa się między cURL a serwerem docelowym. Dlatego bezpieczniej jest nie używać opcji weryfikacji certyfikatu (-k). Nawet przez proxy certyfikat serwera docelowego jest weryfikowany.
Używając --socks5-hostname, nazwa domeny, do której chcesz się połączyć, jest również rozpoznawana przez proxy, więc nie pozostawia śladów w zapytaniach DNS Twojego serwera.
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"Jak odczytać komunikaty o błędach cURL?
Odebrano kod HTTP 407 z proxy po CONNECT oznacza błąd autoryzacji. Sprawdź login i hasło lub zarejestrowane adresy IP w autoryzacji IP. Jeśli hasło zawiera @ lub :, nie umieszczaj go w adresie, użyj -U lub --proxy-user.
Failed to connect lub Connection timed out występuje, gdy port jest nieprawidłowy lub zapora na twoim serwerze blokuje połączenia wychodzące. Upewnij się, że używasz portu HTTP dla adresów HTTP i portu SOCKS5 dla SOCKS5, oraz że porty wychodzące są otwarte. Opcja -v pokazuje proces łączenia krok po kroku, co ułatwia znalezienie przyczyny.