Tại sao nên kiểm tra proxy bằng cURL?
cURL có sẵn trên hầu hết máy chủ và môi trường phát triển, là công cụ nhanh nhất để xác minh proxy hoạt động đúng. Khi gặp sự cố trong mã hoặc cài đặt trình duyệt, thử cùng dòng lệnh với cURL giúp phân biệt ngay lỗi do proxy hay mã.
Ví dụ sử dụng IP 198.51.100.23, cổng HTTP 8000, cổng SOCKS5 1080, username spx_user, password spx_pass.
Làm thế nào để kết nối HTTP proxy?
Đặt địa chỉ proxy vào tùy chọn -x (hoặc --proxy). Username và password có thể đặt trực tiếp trong địa chỉ hoặc dùng tùy chọn -U để nhập riêng. Khi request HTTPS, cURL sẽ tạo tunnel CONNECT và gửi request mã hóa bên trong đó.
# 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.orgLàm thế nào để kết nối proxy SOCKS5?
--socks5-hostname sẽ phân giải tên miền phía proxy. DNS request từ server của bạn không lộ ra ngoài và tên miền được phân giải theo quốc gia của proxy. --socks5 sẽ phân giải tên miền trên server của bạn trước rồi mới gửi IP qua proxy. Trong hầu hết trường hợp, nên dùng --socks5-hostname.
Dùng socks5h:// với -x cũng cho kết quả tương tự.
# 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.orgLàm thế nào để xem cả thời gian và trạng thái phản hồi?
Tùy chọn -w cho phép xuất thời gian kết nối, thời gian đến byte đầu tiên, tổng thời gian và mã phản hồi trên một dòng. Hữu ích khi so sánh tốc độ proxy giữa các quốc gia hoặc phân biệt xem site đích chậm hay do proxy chậm.
Dùng -o /dev/null để bỏ phần thân và -s để tắt hiển thị tiến trình, bạn sẽ chỉ thấy kết quả gọn gàng.
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/Làm thế nào để kiểm tra toàn bộ danh sách cùng lúc?
Nhận danh sách qua API và chạy cURL cho mỗi dòng để kiểm tra trạng thái tất cả proxy cùng lúc. Script sau nhận danh sách định dạng ip:port:user:pass, xuất IP phản hồi và thời gian mỗi dòng. Có thiết lập timeout để không dừng khi gặp dòng không phản hồi.
#!/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.txtCó thể gọi API bằng cURL không?
Đúng vậy. Bạn có thể kiểm tra số dư, danh sách gói đang hoạt động và danh sách proxy chỉ với một header Authorization: Bearer. Phản hồi JSON có thể được lọc bằng các công cụ như jq để chỉ xem các trường cần thiết.
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"Có thể thiết lập proxy bằng biến môi trường không?
Đúng vậy. cURL và nhiều công cụ dòng lệnh đọc các biến môi trường http_proxy, https_proxy và all_proxy. Thiết lập một lần trong shell sẽ áp dụng proxy cho các công cụ như cURL, wget và pip chạy trong shell đó. Đối với SOCKS5, bạn chỉ cần thêm địa chỉ socks5h:// vào all_proxy.
Thêm địa chỉ không dùng proxy vào no_proxy, phân cách bằng dấu phẩy. Điều này ngăn proxy xử lý cả máy chủ nội bộ hoặc localhost.
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"Làm thế nào để so sánh kết quả giữa HTTP proxy và SOCKS5 proxy?
Gửi cùng yêu cầu đến hai port của cùng IP để so sánh IP và thời gian phản hồi giúp biết cách nào nhanh hơn trong môi trường của bạn. Thường là tương đương, nhưng có thể khác biệt nếu server đích ở xa hoặc DNS chậm.
IP phản hồi phải giống nhau ở cả hai phương thức. Nếu khác, có thể bạn đã trộn cổng từ các dòng khác, vui lòng kiểm tra lại danh sách.
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
doneLàm cách nào để máy chủ kiểm tra IP dùng cho xác thực IP?
Giá trị cần đăng ký cho xác thực IP là địa chỉ IPv4 công cộng mà server của bạn dùng để ra internet. Chạy lệnh curl -4 https://api.ipify.org không qua proxy để xem giá trị này. Đăng ký giá trị này vào mục xác thực IP trong dashboard để kết nối từ server đó mà không cần username/password.
curl -4 -s https://api.ipify.orgProxy có thể xem nội dung trang HTTPS không?
Khi yêu cầu địa chỉ HTTPS bằng HTTP proxy, cURL trước tiên tạo đường hầm CONNECT đến máy chủ đích, sau đó thiết lập kết nối mã hóa trực tiếp với máy chủ đích trong đường hầm đó. Proxy chỉ biết máy chủ nào được kết nối và không thể xem nội dung được mã hóa. Sử dụng tùy chọn -v để xem quá trình CONNECT và kết nối mã hóa tiếp theo.
SOCKS5 cũng tương tự. Proxy chuyển tiếp kết nối và mã hóa được thực hiện giữa cURL và máy chủ đích. Do đó, không nên sử dụng tùy chọn xác minh chứng chỉ (-k) để đảm bảo an toàn. Vì ngay cả khi đi qua proxy, chứng chỉ của máy chủ đích vẫn được xác minh.
Khi dùng --socks5-hostname, tên miền bạn truy cập cũng được proxy phân giải, nên không để lại log DNS request trên server của bạn.
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"Làm thế nào để đọc thông báo lỗi cURL?
Received HTTP code 407 from proxy after CONNECT là lỗi xác thực. Kiểm tra tên người dùng, mật khẩu hoặc địa chỉ IP máy chủ đã đăng ký xác thực IP. Nếu mật khẩu chứa @ hoặc :, không đặt trong địa chỉ mà dùng -U hoặc --proxy-user.
Failed to connect hoặc Connection timed out thường xảy ra khi cổng không khớp hoặc tường lửa trên máy chủ của bạn chặn kết nối đi ra. Hãy sử dụng cổng HTTP cho địa chỉ HTTP và cổng SOCKS5 cho SOCKS5, đồng thời đảm bảo cổng đi ra đang mở. Sử dụng tùy chọn -v để xem quá trình kết nối từng bước, giúp dễ dàng tìm ra nguyên nhân.