Ngiêm cấm sử đụng PROXY và VPS vào mục đích trái pháp luật bạn sẽ phải chịu toàn bộ trách nhiệm trước pháp luật khi sử dụng dịch vụ của chúng tôi tks!
cURL proxy là gì? Hướng dẫn cấu hình cURL chi tiết

cURL proxy là gì? Hướng dẫn cấu hình cURL chi tiết

Chuyên viên Kỹ thuật ProxyVN 07-25-2026 Đang tính... phút đọc

cURL proxy là cách gửi yêu cầu bằng công cụ dòng lệnh cURL thông qua một máy chủ proxy, thay vì kết nối thẳng tới website. Đây là kỹ năng nền cho anh em làm kiểm thử API, thu thập dữ liệu hay kiểm tra proxy vừa mua có chạy không. Bài này ProxyVN hướng dẫn từ lệnh đơn giản nhất tới xác thực, SOCKS5, biến môi trường, đọc lỗi và xoay vòng proxy bằng Bash. Xem thêm dịch vụ tại ProxyVN.

cURL proxy là gì và cơ chế hoạt động

cURL là công cụ dòng lệnh dùng để gửi và nhận dữ liệu qua URL, hỗ trợ hàng chục giao thức như HTTP, HTTPS, FTP. Tên gọi xuất phát từ cụm client URL. Công cụ này có sẵn trên hầu hết hệ điều hành và là thứ đầu tiên lập trình viên dùng khi cần thử một API.

Nhận dữ liệu qua URL

Nhận dữ liệu qua URL

Khi thêm proxy vào lệnh cURL, yêu cầu không đi thẳng tới website nữa. cURL gửi yêu cầu tới máy chủ proxy, proxy thay mặt anh em kết nối tới website, rồi trả kết quả về. Website chỉ nhìn thấy IP của proxy. Tài liệu chính thức curl manpage liệt kê đầy đủ các tùy chọn liên quan tới proxy.

Proxy HTTP và đường hầm CONNECT

Với website dùng HTTP thường, cURL gửi nguyên yêu cầu tới proxy kèm URL đầy đủ, proxy đọc được nội dung và chuyển tiếp. Với website HTTPS, cURL gửi lệnh CONNECT để yêu cầu proxy mở một đường hầm tới website. Sau đó dữ liệu mã hóa đi xuyên qua đường hầm, proxy không đọc được nội dung.

Cơ chế đường hầm này được giải thích kỹ trong bài proxy tunnel là gì. Hiểu được nó giúp anh em đọc log của cURL dễ hơn nhiều, vì dòng CONNECT là nơi hay phát sinh lỗi xác thực.

Proxy SOCKS khác gì proxy HTTP

Proxy SOCKS làm việc ở tầng thấp hơn. Nó không quan tâm dữ liệu là HTTP hay giao thức nào khác, chỉ chuyển tiếp các gói tin giữa cURL và máy đích. SOCKS5 còn hỗ trợ xác thực và cho phép proxy tự phân giải tên miền thay cho máy của anh em.

Vì vậy SOCKS5 linh hoạt hơn, còn proxy HTTP thì phổ biến và dễ cấu hình hơn. Phần lớn gói proxy hiện nay, trong đó có ProxyVN, hỗ trợ cả hai giao thức trên cùng một IP.

Khi nào nên dùng cURL với proxy

  • Kiểm tra proxy vừa mua: chỉ một lệnh là biết proxy có chạy và IP đi ra là gì.
  • Kiểm thử API theo khu vực: xem API trả kết quả khác nhau thế nào với IP từng quốc gia.
  • Gỡ lỗi kết nối: tùy chọn -v cho thấy từng bước bắt tay giữa cURL, proxy và website.
  • Viết script tự động nhỏ: tải dữ liệu định kỳ, theo dõi trạng thái website qua IP khác.
  • Kiểm tra cấu hình mạng công ty: xác nhận lưu lượng có đi qua proxy nội bộ như mong muốn.

Chuẩn bị trước khi dùng cURL proxy

Chuẩn bị trước khi dùng cURL proxy gồm hai việc: cài đúng cURL và có đủ thông tin proxy. Thiếu một trong hai, lệnh sẽ báo lỗi ngay từ đầu và anh em dễ nghĩ nhầm là proxy hỏng.

Kiểm tra và cài đặt cURL

Hầu hết hệ điều hành đều có cURL sẵn. Anh em chạy lệnh dưới đây để xem phiên bản và danh sách giao thức được hỗ trợ:

curl --version

Kết quả hiển thị phiên bản, thư viện SSL và dòng Protocols. Nếu dòng Features có chữ HTTPS-proxy, bản cURL đó hỗ trợ kết nối tới proxy qua HTTPS. Phiên bản từ 7.52 trở lên mới có tính năng này.

Nếu máy chưa có, cài theo hệ điều hành:

  • Ubuntu, Debian: chạy sudo apt install curl.
  • CentOS, Rocky, Fedora: chạy sudo dnf install curl.
  • macOS: có sẵn, hoặc cài bản mới hơn bằng brew install curl.
  • Windows 10 và 11: có sẵn curl.exe từ bản cập nhật 1803 trở đi, mở Command Prompt và gõ curl --version.

Lưu ý với Windows PowerShell 5.1: lệnh curl ở đây là bí danh của Invoke-WebRequest, không phải cURL thật. Anh em gõ curl.exe thay vì curl để gọi đúng công cụ, nếu không các tùy chọn như -x sẽ báo lỗi khó hiểu.

Thông tin proxy cần có

Một proxy đầy đủ thông tin gồm năm thành phần. Nhà cung cấp thường gửi theo định dạng ip:port:user:pass:

  • Giao thức: http, https, socks4, socks5 hoặc socks5h.
  • Địa chỉ IP hoặc tên miền của máy chủ proxy.
  • Cổng, ví dụ 8080, 3128 hay một cổng riêng do nhà cung cấp cấp.
  • Tên người dùng và mật khẩu nếu proxy yêu cầu xác thực.
  • Danh sách IP được phép nếu proxy xác thực theo IP thay vì mật khẩu.

Cú pháp chung mà cURL hiểu là giao_thuc://user:pass@ip:port. Nếu bỏ qua phần giao thức, cURL mặc định hiểu là proxy HTTP.

Chọn loại proxy phù hợp với việc dùng cURL

Loại proxy ảnh hưởng trực tiếp tới kết quả lệnh cURL, nhất là khi gửi tới website có hệ thống chống bot. Mỗi loại hợp với một nhóm việc khác nhau:

  • Proxy datacenter: nhanh, rẻ, hợp với kiểm thử API, theo dõi trạng thái website và tải dữ liệu từ nguồn ít chặn.
  • Proxy dân cư tĩnh: IP của nhà mạng, hợp khi website đích kiểm tra kỹ nguồn IP hoặc cần giữ một IP cố định qua nhiều lệnh.
  • Proxy xoay: mỗi lần gọi có thể ra một IP khác, hợp với script gửi nhiều yêu cầu tới cùng một website.

Một điểm hay bị bỏ qua là cURL không chạy JavaScript và không có dấu vân tay trình duyệt đầy đủ. Với những website dựa nhiều vào JavaScript để kiểm tra người dùng, đổi IP tốt hơn cũng chưa đủ, anh em cần chuyển sang trình duyệt tự động.

Cách dùng cURL proxy với HTTP và HTTPS

Cách dùng cURL proxy với HTTP và HTTPS chỉ xoay quanh một tùy chọn chính là -x, viết dài là --proxy. Phần này đi từ trường hợp đơn giản nhất tới các trường hợp có xác thực và proxy chạy trên HTTPS.

Lệnh cURL với proxy HTTP và SOCKS5

Lệnh cURL với proxy HTTP và SOCKS5

Kết nối proxy không cần tài khoản

Với proxy mở hoặc proxy xác thực theo IP, anh em chỉ cần địa chỉ và cổng. Trang api.ipify.org trả về IP mà website nhìn thấy, rất tiện để kiểm tra:

# Cach viet ngan
curl -x http://203.0.113.5:8080 https://api.ipify.org
 
# Cach viet day du, ket qua giong het
curl --proxy http://203.0.113.5:8080 https://api.ipify.org

Nếu kết quả là IP của proxy chứ không phải IP nhà anh em, proxy đã hoạt động. Đây là phép thử đầu tiên ProxyVN luôn khuyên khách hàng chạy sau khi nhận proxy.

Xác thực bằng tên người dùng và mật khẩu

Có hai cách truyền thông tin đăng nhập. Cách thứ nhất là viết thẳng vào URL proxy. Cách thứ hai là dùng tùy chọn -U, viết dài là --proxy-user, tách riêng khỏi địa chỉ:

# Cach 1: user va mat khau nam trong URL proxy
curl -x http://user123:matkhau@203.0.113.5:8080 https://api.ipify.org
 
# Cach 2: tach rieng bang -U
curl -x http://203.0.113.5:8080 -U user123:matkhau https://api.ipify.org

Nếu mật khẩu chứa ký tự đặc biệt như @, : hay #, cách 1 dễ bị hiểu sai. Lúc đó hãy dùng cách 2 hoặc mã hóa ký tự theo chuẩn URL, ví dụ @ thành %40. Cách 2 cũng giúp đọc lệnh rõ ràng hơn khi chia sẻ cho đồng đội.

Ẩn mật khẩu khỏi lịch sử lệnh

Mật khẩu gõ trực tiếp trong lệnh sẽ nằm lại trong lịch sử shell và có thể bị người khác dùng chung máy nhìn thấy. Nếu chỉ ghi tên người dùng sau -U mà bỏ phần mật khẩu, cURL sẽ hỏi mật khẩu khi chạy:

curl -x http://203.0.113.5:8080 -U user123 https://api.ipify.org
# cURL hien: Enter proxy password for user 'user123':

Với script tự động, cách an toàn hơn là đọc thông tin từ biến môi trường hoặc file cấu hình có phân quyền chặt, phần sau sẽ hướng dẫn.

Kết nối tới proxy qua HTTPS

Thông thường, kết nối từ cURL tới proxy là văn bản thường, chỉ kết nối từ proxy tới website là mã hóa. Với proxy hỗ trợ HTTPS, anh em đổi giao thức thành https:// để mã hóa luôn chặng đầu, kể cả thông tin đăng nhập:

curl -x https://user123:matkhau@proxy.example.com:443 https://api.ipify.org
 
# Neu proxy dung chung chi tu ky trong moi truong thu nghiem
curl -x https://proxy.example.com:443 --proxy-insecure https://api.ipify.org

Tùy chọn --proxy-insecure bỏ qua kiểm tra chứng chỉ của proxy, chỉ nên dùng khi thử nghiệm. Lý do nên mã hóa chặng này được phân tích trong bài pillar proxy HTTPS là gì.

Gửi header riêng cho proxy

Một số proxy cần header riêng, ví dụ để chọn quốc gia hay phiên. Tùy chọn --proxy-header chỉ gửi header tới proxy, không gửi tới website, khác với -H gửi tới cả hai:

curl -x http://203.0.113.5:8080 --proxy-header "X-Session: abc123" https://api.ipify.org

Cấu hình cURL proxy với SOCKS4 và SOCKS5

Cấu hình cURL proxy với SOCKS4 và SOCKS5 dùng cùng tùy chọn -x, chỉ đổi phần giao thức. cURL cũng có các tùy chọn riêng như --socks5 cho ai quen cách viết cũ.

Các cách viết lệnh SOCKS

# SOCKS5, DNS phan giai tren may cua anh em
curl -x socks5://user123:matkhau@203.0.113.5:1080 https://api.ipify.org
 
# SOCKS5, DNS phan giai tren proxy (nen dung)
curl -x socks5h://user123:matkhau@203.0.113.5:1080 https://api.ipify.org
 
# Cach viet bang tuy chon rieng
curl --socks5-hostname 203.0.113.5:1080 -U user123:matkhau https://api.ipify.org
 
# SOCKS4 khong ho tro mat khau
curl -x socks4://203.0.113.5:1080 https://api.ipify.org

Vì sao nên dùng socks5h

Khác biệt giữa socks5 và socks5h nằm ở nơi phân giải tên miền. Với socks5, máy của anh em tự hỏi DNS để biết IP của website rồi mới nhờ proxy kết nối. Truy vấn DNS này đi thẳng qua nhà mạng, nghĩa là nhà mạng vẫn biết anh em đang vào website nào.

Với socks5h, tên miền được gửi cho proxy và proxy tự phân giải. Không có truy vấn DNS nào rời máy anh em, giúp tránh rò rỉ DNS và cũng tránh trường hợp DNS nội địa trả về IP khác với DNS ở quốc gia của proxy. Bài hướng dẫn của Oxylabs về cURL với proxy cũng khuyến nghị cách viết này.

Nối nhiều proxy với --preproxy

cURL cho phép đặt một proxy SOCKS đứng trước proxy chính bằng tùy chọn --preproxy. Yêu cầu sẽ đi qua proxy SOCKS trước, rồi mới tới proxy HTTP, rồi mới ra website:

curl --preproxy socks5h://10.0.0.2:1080 -x http://203.0.113.5:8080 https://api.ipify.org

Đây là một dạng nối chuỗi proxy đơn giản. Anh em muốn hiểu ưu nhược điểm của việc nối nhiều tầng có thể đọc bài proxy chaining là gì. Nếu cần đi qua máy chủ trung gian bằng SSH thay vì proxy, bài SSH ProxyJump là gì là lựa chọn phù hợp hơn.

Thiết lập cURL proxy bằng biến môi trường

Thiết lập cURL proxy bằng biến môi trường giúp anh em không phải gõ -x ở mỗi lệnh. cURL tự đọc các biến này khi chạy, và nhiều công cụ khác như wget, pip, git cũng đọc cùng các biến đó.

Biến môi trường và file .curlrc

Biến môi trường và file .curlrc

Các biến cURL đọc

  • http_proxy: proxy cho URL http. cURL chỉ đọc bản viết thường của biến này, vì lý do bảo mật trong môi trường CGI.
  • https_proxy hoặc HTTPS_PROXY: proxy cho URL https.
  • ALL_PROXY hoặc all_proxy: proxy dùng cho mọi giao thức khi không có biến riêng.
  • NO_PROXY hoặc no_proxy: danh sách tên miền và IP đi thẳng, không qua proxy.

Cách đặt biến trên từng hệ điều hành như sau:

# Linux va macOS, chi co hieu luc trong cua so terminal hien tai
export http_proxy="http://user123:matkhau@203.0.113.5:8080"
export https_proxy="http://user123:matkhau@203.0.113.5:8080"
export no_proxy="localhost,127.0.0.1,.noibo.local"
curl https://api.ipify.org
 
# Bo bien khi khong can nua
unset http_proxy https_proxy
 
# Windows Command Prompt
set https_proxy=http://user123:matkhau@203.0.113.5:8080
curl.exe https://api.ipify.org
 
# Windows PowerShell
$env:https_proxy = "http://user123:matkhau@203.0.113.5:8080"
curl.exe https://api.ipify.org

Bỏ qua proxy cho một số địa chỉ

Biến no_proxy và tùy chọn --noproxy cho phép một số địa chỉ đi thẳng, ví dụ máy chủ nội bộ hay localhost. Tùy chọn trên dòng lệnh luôn ưu tiên hơn biến môi trường:

# Khong dung proxy cho localhost va mien noi bo
curl --noproxy "localhost,127.0.0.1,.noibo.local" http://localhost:3000/health
 
# Bo qua proxy cho moi dia chi trong lenh nay
curl --noproxy "*" https://api.ipify.org

Cách viết danh sách no_proxy có nhiều điểm khác nhau giữa các công cụ, ví dụ dấu chấm đầu tên miền hay dải CIDR. Anh em xem chi tiết trong bài no_proxy là gì.

Lưu cURL proxy trong tệp cấu hình

Lưu cURL proxy trong tệp cấu hình phù hợp khi anh em dùng một proxy cố định trong thời gian dài. cURL tự đọc file này mỗi lần chạy, không cần đặt biến hay gõ thêm tùy chọn.

Vị trí và nội dung file .curlrc

Trên Linux và macOS, file nằm ở thư mục nhà với tên .curlrc. Trên Windows, cURL tìm file _curlrc hoặc .curlrc trong thư mục %APPDATA% hoặc %USERPROFILE%. Nội dung mỗi dòng là một tùy chọn, viết không có dấu gạch ngang:

# Noi dung file ~/.curlrc
proxy = "http://203.0.113.5:8080"
proxy-user = "user123:matkhau"
noproxy = "localhost,127.0.0.1"

Sau đó chỉ cần gõ curl https://api.ipify.org là lệnh tự đi qua proxy. Trên Linux, anh em nên giới hạn quyền đọc file bằng chmod 600 ~/.curlrc vì trong đó có mật khẩu.

Dùng file cấu hình riêng cho từng dự án

Nếu có nhiều proxy cho nhiều việc, tạo mỗi việc một file cấu hình và gọi bằng tùy chọn -K. Cách này giúp không lẫn proxy giữa các dự án:

curl -K proxy-viettel.cfg https://api.ipify.org
curl -K proxy-us.cfg https://api.ipify.org
 
# Tam thoi bo qua ~/.curlrc trong mot lenh
curl -q https://api.ipify.org

Lưu ý tùy chọn -q phải đứng đầu tiên trong lệnh mới có tác dụng. Nó hữu ích khi anh em nghi file .curlrc đang gây ra lỗi lạ.

Kiểm tra cURL proxy và xử lý lỗi thường gặp

Kiểm tra cURL proxy kỹ trước khi đưa vào script giúp anh em tránh mất thời gian dò lỗi về sau. Hai công cụ chính là tùy chọn -v để xem từng bước, và -w để in ra các con số đo lường.

Đọc lỗi cURL khi dùng proxy

Đọc lỗi cURL khi dùng proxy

Đọc log chi tiết với -v

Tùy chọn -v hiển thị toàn bộ quá trình bắt tay. Với proxy HTTP và website HTTPS, anh em sẽ thấy dòng CONNECT gửi tới proxy và phản hồi của proxy:

curl -v -x http://user123:matkhau@203.0.113.5:8080 https://example.com -o /dev/null
 
# Cac dong quan trong trong ket qua:
# * Connected to 203.0.113.5 port 8080
# > CONNECT example.com:443 HTTP/1.1
# > Proxy-Authorization: Basic dXNlcjEyMzptYXRraGF1
# < HTTP/1.1 200 Connection established
# * SSL connection using TLSv1.3

Nếu dòng phản hồi CONNECT là 200, proxy đã mở đường hầm thành công và mọi lỗi sau đó thuộc về website. Nếu là 407, proxy từ chối xác thực. Nếu là 403, proxy không cho phép kết nối tới địa chỉ đó.

Đo tốc độ proxy

Tùy chọn -w in ra thời gian của từng giai đoạn. Đây là cách nhanh nhất để so sánh hai proxy với nhau:

curl -x http://user123:matkhau@203.0.113.5:8080 -o /dev/null -s \
  -w "ket noi: %{time_connect}s | tls: %{time_appconnect}s | tong: %{time_total}s | ma: %{http_code}\n" \
  https://example.com

Thời gian kết nối cao cho thấy proxy ở xa hoặc đang quá tải. Thời gian tổng cao mà kết nối thấp thì vấn đề thường nằm ở website đích.

Bảng mã lỗi cURL hay gặp với proxy

Mã lỗi

Thông báo

Nguyên nhân thường gặp

Cách xử lý

5

Could not resolve proxy

Gõ sai tên miền proxy hoặc DNS lỗi

Kiểm tra lại địa chỉ, thử dùng IP

7

Failed to connect to proxy

Sai cổng, proxy tắt hoặc tường lửa chặn

Kiểm tra cổng, thử telnet hoặc nc tới proxy

28

Operation timed out

Proxy quá chậm hoặc mạng chập chờn

Tăng --connect-timeout, đổi proxy

35

SSL connect error

Lỗi bắt tay TLS, thường với proxy HTTPS

Kiểm tra giao thức http hay https của proxy

56

CONNECT tunnel failed, response 407

Sai user hoặc mật khẩu proxy

Kiểm tra thông tin, mã hóa ký tự đặc biệt

97

Proxy handshake error

Sai giao thức SOCKS hoặc sai xác thực SOCKS

Đổi socks4 sang socks5 hoặc kiểm tra mật khẩu

Lỗi 407 có bài riêng với đầy đủ cách khắc phục là sửa lỗi 407 proxy authentication required. Khi lỗi do website trả về chứ không phải proxy, ví dụ 503, anh em cần xử lý theo hướng khác hẳn.

Đặt thời gian chờ hợp lý

Mặc định cURL có thể chờ rất lâu khi proxy không phản hồi. Trong script, anh em nên luôn đặt giới hạn:

curl -x http://203.0.113.5:8080 --connect-timeout 10 --max-time 30 https://api.ipify.org

Tùy chọn --connect-timeout giới hạn thời gian kết nối tới proxy, còn --max-time giới hạn cả lệnh. Hai con số này giúp script không treo khi gặp một proxy chết.

Xoay vòng cURL proxy bằng Bash

Xoay vòng cURL proxy bằng Bash là cách đơn giản để phân bổ yêu cầu qua nhiều IP mà không cần ngôn ngữ lập trình nào khác. Phù hợp với tác vụ nhỏ như kiểm tra hàng loạt URL hay kiểm tra danh sách proxy.

Kiểm tra cả danh sách proxy

Giả sử anh em có file proxies.txt, mỗi dòng một proxy theo định dạng ip:port:user:pass. Script dưới đây do ProxyVN viết làm ví dụ, kiểm tra từng proxy và in ra IP đi ra cùng thời gian phản hồi:

#!/usr/bin/env bash
# kiem-tra-proxy.sh
while IFS=: read -r ip port user pass; do
  [ -z "$ip" ] && continue
  ket_qua=$(curl -s -x "http://$user:$pass@$ip:$port" \
    --connect-timeout 8 --max-time 15 \
    -w " %{time_total}s" https://api.ipify.org)
  if [ $? -eq 0 ]; then
    echo "OK   $ip:$port -> $ket_qua"
  else
    echo "LOI  $ip:$port"
  fi
done < proxies.txt

Lấy dữ liệu qua nhiều proxy luân phiên

Script tiếp theo đọc danh sách URL và dùng lần lượt từng proxy cho mỗi URL, có nghỉ ngẫu nhiên giữa các lần để không dồn yêu cầu:

#!/usr/bin/env bash
mapfile -t PROXIES < proxies.txt
mapfile -t URLS < urls.txt
i=0
for url in "${URLS[@]}"; do
  IFS=: read -r ip port user pass <<< "${PROXIES[$((i % ${#PROXIES[@]}))]}"
  ten_file="trang_$i.html"
  ma=$(curl -s -o "$ten_file" -w "%{http_code}" \
    -x "http://$user:$pass@$ip:$port" --max-time 30 "$url")
  echo "$ma  $ip  $url"
  i=$((i + 1))
  sleep $((RANDOM % 3 + 1))
done

Script Bash phù hợp cho việc nhỏ và nhanh. Khi cần xử lý cookie, JavaScript hay hàng nghìn luồng, anh em nên chuyển sang Python hoặc trình duyệt tự động. Bài cách sử dụng proxy trong Puppeteer là bước tiếp theo hợp lý cho các trang nặng JavaScript.

Mẹo vận hành cURL proxy ổn định

  • Luôn đặt thời gian chờ để một proxy chết không làm treo cả script.
  • Ghi lại mã trạng thái và IP của mỗi yêu cầu để biết proxy nào hay lỗi.
  • Dùng socks5h khi cần tránh rò rỉ DNS.
  • Không để mật khẩu trong lịch sử lệnh, dùng file cấu hình phân quyền chặt hoặc biến môi trường.
  • Đặt User-Agent hợp lý bằng -A khi gửi tới website, vì một số website chặn User-Agent mặc định của cURL.

Anh em có thể mua proxy tại ProxyVN rồi gắn vào lệnh cURL bằng tùy chọn -x như trong bài, dùng được cả HTTP lẫn SOCKS5.

Một lệnh curl -x kèm api.ipify.org là phép thử proxy nhanh nhất mà anh em có. Hãy chạy nó trước khi nghi ngờ bất cứ thứ gì khác.

Dùng cURL proxy trong PHP và các ngôn ngữ khác

Dùng cURL proxy không chỉ giới hạn ở dòng lệnh. Thư viện libcurl nằm phía sau công cụ cURL được nhúng vào rất nhiều ngôn ngữ, nên cách cấu hình proxy gần như giống nhau ở mọi nơi. Hiểu tùy chọn dòng lệnh là anh em đã hiểu được 80% cách dùng trong code.

Thứ tự ưu tiên khi có nhiều cấu hình

Trước khi chuyển sang code, anh em cần nắm cURL chọn proxy theo thứ tự nào khi có nhiều nguồn cấu hình cùng lúc. Đây là chỗ gây nhầm lẫn nhiều nhất khi lệnh chạy một kiểu trên máy này và kiểu khác trên máy kia:

  • Tùy chọn trên dòng lệnh như -x và --noproxy luôn được ưu tiên cao nhất.
  • File cấu hình gọi bằng -K hoặc file .curlrc mặc định đứng thứ hai.
  • Biến môi trường như https_proxy và no_proxy chỉ được dùng khi hai nguồn trên không khai báo gì.

Vì vậy khi gặp kết quả lạ, anh em nên kiểm tra lần lượt ba nơi này. Một biến https_proxy quên chưa xóa từ tuần trước là thủ phạm quen thuộc khiến lệnh đi qua proxy mà người dùng không hề hay biết.

cURL proxy trong PHP

PHP dùng libcurl qua các hàm curl_setopt. Ba tùy chọn chính tương ứng với -x, -U và giao thức proxy. Đoạn dưới đây là ví dụ triển khai cơ bản:

<?php
$ch = curl_init("https://api.ipify.org?format=json");
curl_setopt($ch, CURLOPT_PROXY, "203.0.113.5:8080");
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user123:matkhau");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);   // hoac CURLPROXY_SOCKS5_HOSTNAME
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$ket_qua = curl_exec($ch);
if ($ket_qua === false) {
    echo "Loi: " . curl_error($ch);
} else {
    echo $ket_qua;
}
curl_close($ch);

Hằng CURLPROXY_SOCKS5_HOSTNAME tương đương với socks5h trên dòng lệnh, tức để proxy phân giải tên miền. Anh em làm plugin WordPress hay website PHP cần gọi API qua IP khác có thể dùng nguyên khung này.

Chuyển lệnh cURL sang Python

Trong Python, thư viện requests không dùng libcurl nhưng nhận proxy theo cú pháp URL giống hệt cURL. Vì vậy một chuỗi proxy đã chạy được với curl -x thì dán thẳng vào requests cũng chạy:

import requests
 
proxy = "socks5h://user123:matkhau@203.0.113.5:1080"   # can: pip install requests[socks]
r = requests.get("https://api.ipify.org", proxies={"http": proxy, "https": proxy}, timeout=15)
print(r.text)

Requests cũng đọc các biến môi trường http_proxy, https_proxy và no_proxy giống cURL. Nếu muốn một phiên requests bỏ qua biến môi trường, anh em đặt thuộc tính trust_env của phiên về False.

Kiểm tra lệnh trước khi viết code

Kinh nghiệm của đội ProxyVN là luôn thử bằng cURL trước, rồi mới viết code. Nếu lệnh cURL chạy mà code không chạy, lỗi nằm ở code. Nếu cả hai cùng lỗi, vấn đề nằm ở proxy hoặc mạng. Phép thử này tách được hai nhóm nguyên nhân chỉ trong một phút, đỡ rất nhiều thời gian dò lỗi trong thư viện.

Nhiều công cụ kiểm thử API như Postman hay trình duyệt Chrome còn cho phép sao chép một yêu cầu thành lệnh cURL. Anh em chỉ cần thêm -x vào lệnh vừa sao chép là có ngay một phép thử qua proxy với đúng header và cookie của yêu cầu gốc.

Câu hỏi thường gặp về cURL proxy

Làm sao biết cURL có đang đi qua proxy không?

Chạy lệnh tới api.ipify.org hoặc ifconfig.me. Nếu IP trả về là IP của proxy thì lệnh đã đi qua proxy. Có thể thêm -v để xem dòng Connected to có phải địa chỉ proxy không.

Vì sao lệnh -x không chạy trên PowerShell?

Trên Windows PowerShell 5.1, curl là bí danh của Invoke-WebRequest. Hãy gõ curl.exe để gọi đúng cURL thật, các tùy chọn -x, -U sẽ hoạt động bình thường.

Mật khẩu proxy có ký tự @ thì viết thế nào?

Dùng tùy chọn -U để tách thông tin đăng nhập khỏi địa chỉ proxy, hoặc mã hóa @ thành %40 nếu viết trong URL.

socks5 và socks5h khác nhau ra sao?

Với socks5, máy của anh em tự phân giải tên miền. Với socks5h, proxy phân giải giúp. Dùng socks5h để tránh rò rỉ DNS và nhận đúng IP của website theo khu vực của proxy.

Có cách nào tắt proxy cho một lệnh khi đã đặt biến môi trường?

Có. Thêm --noproxy "*" vào lệnh, hoặc truyền -x "" để bỏ proxy cho riêng lệnh đó.

Xem thêm:

Kết luận

cURL proxy là kỹ năng nhỏ nhưng dùng mỗi ngày: kiểm tra proxy, thử API theo khu vực, gỡ lỗi kết nối và viết script tự động nhanh gọn. Nắm vững -x, -U, socks5h, biến môi trường và -v là đủ cho phần lớn công việc. Cần proxy ổn định, liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam để dùng cURL proxy hiệu quả.

TIN TỨC LIÊN QUAN