Tới nội dung
Cloudj

Kiến thức proxy

Kiểm tra proxy bằng curl: xem IP ra, tốc độ và mã lỗi

Hướng dẫn kiểm tra proxy bằng curl: cú pháp HTTP và socks5h, --proxy-user, xem IP ra và quốc gia, đo thời gian từng bước kết nối, đọc các mã lỗi hay gặp.

Cập nhật · 5 phút đọc

Trước khi đưa proxy mới vào tool scraping, profile trình duyệt hay điện thoại, bạn nên kiểm tra proxy bằng curl trước. Chỉ một lệnh là biết host, port, tài khoản có đúng không, website đích thực sự nhìn thấy IP nào, và mỗi bước kết nối mất bao lâu. Khi có lỗi, thông báo của curl chỉ ra nguyên nhân rõ ràng hơn nhiều so với trình duyệt. Bài này gồm các lệnh cho HTTP proxy và SOCKS5 proxy, cách đọc kết quả và một bảng xử lý lỗi ngắn gọn.

Lệnh cơ bản để kiểm tra proxy bằng curl

Bạn cần bốn thông tin từ nhà cung cấp: host, port, username và password. Với Cloudj, các thông tin này hiển thị cho từng proxy trong console. Ví dụ bên dưới dùng 203.0.113.10 port 8080 làm địa chỉ minh họa.

Với HTTP proxy:

curl -x http://203.0.113.10:8080 --proxy-user myuser:mypass https://ifconfig.me/ip
  • -x (dạng dài --proxy) khai báo proxy. Tiền tố http:// báo cho curl đây là HTTP proxy.
  • --proxy-user (dạng ngắn -U) gửi thông tin đăng nhập proxy. Đừng nhầm với -u, vốn dùng để đăng nhập vào chính website đích.
  • https://ifconfig.me/ip là dịch vụ trả về IP mà nó nhìn thấy. Dịch vụ tương tự nào cũng được.

Nếu proxy hoạt động, kết quả trả về là IP của proxy chứ không phải IP nhà bạn. Chạy lại cùng URL nhưng bỏ -x để so sánh.

Bạn cũng có thể nhét thông tin đăng nhập vào URL proxy:

curl -x http://myuser:[email protected]:8080 https://ifconfig.me/ip

Cách này dễ hỏng khi mật khẩu có ký tự như @, : hay #, vì chúng có ý nghĩa riêng trong URL. Hãy mã hóa phần trăm (ví dụ @ thành %40) hoặc cứ dùng --proxy-user, vốn không cần mã hóa. Nếu mật khẩu có ký tự đặc biệt của shell như $ hay !, hãy đặt nó trong dấu nháy đơn.

Kiểm tra SOCKS5 proxy: socks5 hay socks5h

Với SOCKS5 proxy, bạn chỉ cần đổi scheme:

curl -x socks5h://203.0.113.10:1080 --proxy-user myuser:mypass https://ifconfig.me/ip

Chữ h rất quan trọng. Với socks5://, curl tự phân giải tên miền trên máy bạn rồi chỉ gửi IP qua proxy. Với socks5h://, chính proxy sẽ phân giải tên miền. Hãy dùng socks5h khi bạn muốn truy vấn DNS diễn ra tại vị trí của proxy, thường là điều bạn cần khi làm việc phụ thuộc vị trí địa lý và khi không muốn truy vấn DNS lộ ra mạng nội bộ hay nhà mạng của mình. Nếu thích tùy chọn dạng dài, --socks5-hostname và --socks5 làm đúng việc tương ứng. Khác biệt giữa hai giao thức được giải thích trong bài SOCKS5 và HTTP proxy.

Lỗi rất hay gặp là dùng URL http:// cho một port SOCKS5, hoặc ngược lại. Khi đó kết nối thất bại với thông báo khó hiểu. Trên Cloudj, bạn xem được đơn hàng đang dùng giao thức nào và có thể đổi ngay trong console, ở những vị trí hỗ trợ cả hai.

Xem IP đang được nhận diện ở đâu

Để biết các dịch vụ tra cứu IP gán proxy vào quốc gia và mạng nào, hãy gọi một dịch vụ trả về JSON:

curl -s -x http://203.0.113.10:8080 --proxy-user myuser:mypass https://ipinfo.io/json

Các cơ sở dữ liệu định vị IP được xây dựng độc lập và không phải lúc nào cũng khớp nhau, nên dịch vụ khác có thể báo thành phố khác. Quốc gia thì thường thống nhất. Nếu một website báo vị trí khác với bạn mong đợi, đó là do website đó dùng cơ sở dữ liệu riêng. Các dịch vụ tra cứu cũng báo loại mạng, chẳng hạn địa chỉ thuộc dải hosting hay thuộc nhà mạng (ISP); bài proxy datacenter và static ISP giải thích vì sao điều này quan trọng.

Đo thời gian từng bước kết nối

curl in được thời gian của từng giai đoạn. Bạn có thể lưu lệnh này để dùng lại:

curl -s -o /dev/null -x http://203.0.113.10:8080 --proxy-user myuser:mypass \
  -w 'connect: %{time_connect}s  tls: %{time_appconnect}s  first byte: %{time_starttransfer}s  total: %{time_total}s  code: %{http_code}\n' \
  https://example.com/

Cách đọc:

  • time_connect là thời gian mở kết nối TCP tới proxy, chủ yếu phản ánh khoảng cách giữa bạn và proxy.
  • time_appconnect cộng thêm bước bắt tay TLS với website đích qua đường hầm.
  • time_starttransfer cộng thêm thời gian website đích phản hồi.
  • http_code là mã trạng thái từ website đích.

Hãy chạy năm đến mười lần và nhìn vào mức dao động thay vì một kết quả duy nhất. Nếu bạn đo từ một máy chủ đặt cùng khu vực với hệ thống thật (ví dụ một cloud server gần website mục tiêu), con số sẽ sát với thực tế hơn là đo từ laptop qua mạng gia đình.

Xem toàn bộ quá trình với -v

Khi có lỗi, thêm -v:

curl -v -x http://203.0.113.10:8080 --proxy-user myuser:mypass https://example.com/ -o /dev/null

Với website HTTPS đi qua HTTP proxy, bạn sẽ thấy curl gửi CONNECT example.com:443, sau đó là một dòng kiểu HTTP/1.1 200 Connection established, rồi tới bước bắt tay TLS. Nếu proxy trả về 407 Proxy Authentication Required, nghĩa là thông tin đăng nhập bị từ chối.

Bảng xử lý lỗi thường gặp

Bạn thấy gìNguyên nhân thường gặpCần kiểm tra
curl: (5) Could not resolve proxyGõ sai host proxySao chép lại host từ console
curl: (7) Failed to connectSai port, hoặc firewall chặn kết nối ra port đóSố port; thử từ mạng khác
407 Proxy Authentication RequiredSai username/password, hoặc mật khẩu vừa được đổiSao chép lại; nếu dùng whitelist, kiểm tra IP public hiện tại
curl: (28) Connection timed outĐường mạng có vấn đề hoặc website đích chậmThêm --connect-timeout 10 để phân biệt hai trường hợp
curl: (6) Could not resolve host khi dùng socks5://DNS trên máy bạn không phân giải được tên miềnChuyển sang socks5h://
Lỗi SOCKS5 báo người dùng bị từ chốiSai thông tin đăng nhập SOCKSKiểm tra như với lỗi 407
Lỗi lạ hoặc phản hồi rỗngLệch giao thức: URL HTTP trỏ vào port SOCKS hoặc ngược lạiXác nhận giao thức trong console

Về whitelist IP: trên Cloudj bạn có thể thay xác thực mật khẩu bằng whitelist tối đa 20 địa chỉ IP. Nếu proxy đang dùng whitelist, hãy chạy lệnh từ máy có IP nằm trong whitelist và bỏ --proxy-user. Kiểm tra từ IP khác sẽ bị từ chối, đúng như thiết kế. Đọc thêm bài whitelist IP hay mật khẩu để biết khi nào nên dùng cách nào.

Kiểm tra cả danh sách proxy

Nếu bạn mua nhiều IP, một vòng lặp nhỏ sẽ kiểm tra hết. Mỗi dòng trong proxies.txt ghi theo dạng host:port:user:pass:

while IFS=: read -r host port user pass; do
  ip=$(curl -s --max-time 15 -x "http://$host:$port" --proxy-user "$user:$pass" https://ifconfig.me/ip)
  echo "$host:$port -> ${ip:-FAILED}"
done < proxies.txt

Mỗi dòng phải in ra đúng IP của proxy tương ứng. Nếu có dòng lỗi, vấn đề nằm ở đúng proxy đó chứ không phải ở cấu hình chung.

Lưu ý trên Windows và biến môi trường

Windows 10 và 11 có sẵn curl.exe. Trong Windows PowerShell hãy gõ curl.exe, vì curl không kèm đuôi có thể là bí danh của một lệnh khác. Dùng nháy kép thay cho nháy đơn.

curl cũng đọc các biến môi trường proxy như https_proxy và ALL_PROXY. Với URL HTTP thường, curl chỉ đọc biến chữ thường http_proxy. Nếu kết quả kiểm tra kỳ lạ, chạy env | grep -i proxy để chắc chắn không có biến cũ nào xen vào. Chi tiết mọi tùy chọn có trong tài liệu chính thức của curl.

Câu hỏi thường gặp

Tùy chọn -x trong curl dùng để làm gì?

Nó khai báo proxy cho request. Scheme trong URL proxy (http://, socks5://, socks5h://) cho curl biết phải nói chuyện với proxy bằng giao thức nào.

Nên dùng socks5 hay socks5h?

Phần lớn trường hợp nên dùng socks5h để proxy tự phân giải tên miền. socks5 thường thì phân giải trên máy bạn và chỉ gửi IP qua proxy.

Vì sao curl hiện IP proxy nhưng website lại báo quốc gia khác?

Mỗi website dùng cơ sở dữ liệu định vị riêng, và các cơ sở dữ liệu này đôi khi không khớp nhau, nhất là ở cấp thành phố.

Có kiểm tra proxy mà không cần mật khẩu được không?

Được, nếu proxy dùng whitelist IP và bạn chạy curl từ một IP trong whitelist. Khi đó bỏ --proxy-user.

Bước tiếp theo

Khi curl đã xác nhận IP và thông tin đăng nhập, bạn có thể yên tâm đưa cùng các giá trị đó vào trình duyệt, tool scraping hay điện thoại. Nếu bạn chưa có proxy, hướng dẫn chọn proxy riêng giúp bạn chọn đúng loại, trang proxy IPv4 liệt kê các quốc gia hiện có, còn trang bảng giá hiển thị giá cập nhật trước khi bạn đặt hàng trong console.

Xem tiếp

Triển khai máy chủ hoặc mua proxy

Chọn vị trí trong console, xem giá trực tiếp và thanh toán từ số dư tài khoản.