Quay lại blog

Cách Sử Dụng cURL Với Một Proxy: Ví Dụ HTTP, HTTPS và SOCKS5

James Thompson
James Thompson

Scraping and Proxy Management Expert

07-Aug-2026

TL;DR:

  • Sử dụng -x hoặc --proxy để định tuyến một yêu cầu cURL thông qua proxy HTTP, HTTPS hoặc SOCKS. Giữ URL mục tiêu tách biệt khỏi địa chỉ proxy.
  • Một mục tiêu HTTPS không yêu cầu proxy HTTPS. Một proxy HTTP thường tạo một đường hầm CONNECT đến một đích HTTPS; một URL proxy https:// thêm vào mã hóa bước nhảy từ khách hàng đến proxy.
  • Sử dụng socks5h:// khi proxy nên giải quyết tên máy chủ mục tiêu. socks5:// thông thường giải quyết nó tại địa phương, điều này có thể phơi bày hành vi DNS hoặc thất bại trên một tên máy chủ chỉ có proxy.
  • Giữ thông tin xác thực ra khỏi URL và tệp nguồn. Trích dẫn các biến shell, bảo vệ các tệp cấu hình và không bao giờ công khai tên người dùng, mật khẩu hoặc mã thông báo cổng thực.
  • Xác minh nhiều hơn địa chỉ IP thoát. Kiểm tra trạng thái, nội dung mong đợi, vị trí, hành vi DNS và yêu cầu kiểm soát không phải proxy trên một mục tiêu được ủy quyền.

Hỗ trợ proxy cURL được tích hợp vào lệnh mà hầu hết các nhà phát triển đã sử dụng cho chuẩn đoán HTTP. Một tùy chọn duy nhất có thể định tuyến một yêu cầu thông qua cổng HTTP, một proxy HTTPS hoặc một máy chủ SOCKS5, với các quy tắc xác thực và loại trừ máy chủ khi cần.

Cú pháp rất đơn giản. Hành vi mạng thì không. Các mục tiêu HTTPS sử dụng các đường hầm, các sơ đồ SOCKS quyết định nơi diễn ra giải quyết DNS, các biến môi trường khác nhau theo trường hợp, và thông tin xác thực có thể bị rò rỉ qua lịch sử lệnh không cẩn thận.

Hướng dẫn này bắt đầu với một lệnh tối thiểu và xây dựng một cấu hình hoạt động trên macOS, Linux và Windows.

Ví dụ cURL Proxy Nhanh

Sử dụng một mục tiêu thử nghiệm công khai được ủy quyền và một proxy mà bạn kiểm soát hoặc được phép sử dụng:

bash Copy
curl --proxy "http://proxy.example.com:8080" \
  --connect-timeout 10 \
  --max-time 30 \
  --show-error \
  "https://example.com/"

Tùy chọn dài --proxy và tùy chọn ngắn -x là tương đương. Tài liệu tham khảo cURL command-line ghi lại các sơ đồ proxy được hỗ trợ, các tùy chọn xác thực và hành vi loại trừ.

Thêm --verbose trong quá trình chẩn đoán để thấy chuỗi kết nối. Loại bỏ đầu ra chi tiết từ nhật ký thông thường vì tiêu đề và chi tiết kết nối có thể nhạy cảm.

Cách Các URL Proxy cURL Hoạt Động

Tùy chọn proxy chấp nhận một sơ đồ, máy chủ và cổng:

sơ đồ://proxy-host:cổng

Các sơ đồ phổ biến là:

  • http:// cho một proxy HTTP;
  • https:// cho TLS giữa cURL và proxy;
  • socks4://socks4a:// cho các biến thể SOCKS4;
  • socks5:// cho SOCKS5 với giải quyết tên mục tiêu địa phương;
  • socks5h:// cho SOCKS5 với giải quyết tên mục tiêu ở phía proxy.

URL mục tiêu vẫn là đối số cuối cùng. Không kết hợp mục tiêu và proxy thành một URL.

Sử dụng một Proxy HTTP Với cURL

Đối với một mục tiêu HTTP đơn giản, cURL gửi yêu cầu qua proxy. Đối với một mục tiêu HTTPS, nó thường yêu cầu proxy mở một đường hầm bằng phương pháp HTTP CONNECT và sau đó thực hiện TLS với đích thông qua đường hầm đó.

bash Copy
# HTTP target through an HTTP proxy
curl -x "http://proxy.example.com:8080" "http://example.com/"

# HTTPS target through the same HTTP proxy
curl -x "http://proxy.example.com:8080" "https://example.com/"

Lệnh thứ hai vẫn bảo vệ yêu cầu và phản hồi HTTP với TLS đích. Kết nối từ khách hàng đến proxy bản thân không được mã hóa riêng trước khi đường hầm được thiết lập, do đó các quan sát viên mạng địa phương có thể thấy kết nối proxy và siêu dữ liệu đích đường hầm.

Tài liệu chỉ định ngữ nghĩa HTTP định nghĩa phương pháp CONNECT được sử dụng để thiết lập một đường hầm.

Sử dụng một Proxy HTTPS Với cURL

Một proxy HTTPS mã hóa bước nhảy từ cURL đến proxy. Tiền tố URL proxy bằng https://:

bash Copy
curl --proxy "https://proxy.example.com:8443" \
  --proxy-cacert "/path/to/proxy-ca.pem" \
  "https://example.com/"

--proxy-cacert cung cấp một gói CA để xác minh chứng chỉ của proxy khi kho lưu trữ tin cậy mặc định không chứa CA phát hành. Không sử dụng --proxy-insecure như một bản sửa chữa vĩnh viễn; nó vô hiệu hóa xác minh chứng chỉ proxy.

Không phải mọi điểm cuối proxy đều chấp nhận TLS. Khớp sơ đồ URL và cổng với tài liệu của nhà cung cấp.

Sử dụng một Proxy SOCKS5 Với cURL

Các proxy SOCKS hoạt động dưới HTTP và có thể truyền tải nhiều giao thức ứng dụng. Đối với các yêu cầu web, lựa chọn quan trọng là nơi tên máy chủ mục tiêu được giải quyết.

bash Copy
# Resolve example.com on the local machine
curl --proxy "socks5://proxy.example.com:1080" "https://example.com/"

# Send example.com to the proxy for resolution
curl --proxy "socks5h://proxy.example.com:1080" "https://example.com/"

# Equivalent long option for proxy-side hostname resolution
curl --socks5-hostname "proxy.example.com:1080" "https://example.com/"

Sử dụng socks5h:// khi tên máy chủ mục tiêu không nên được giải quyết bởi trình giải quyết địa phương, khi tên máy chủ chỉ có thể nhìn thấy từ mạng proxy, hoặc khi DNS địa phương cung cấp kết quả khu vực sai.

Tài liệu Hướng dẫn SOCKS của Everything cURL giải thích sự khác biệt giữa giải quyết tên cục bộ và proxy. Giao thức bản thân được định nghĩa trong RFC 1928.

Xác Thực Đến một Proxy An Toàn

Sử dụng --proxy-user hoặc -U thay vì nhúng thông tin xác thực trong URL proxy:

bash Copy
export PROXY_HOST="proxy.example.com"
export PROXY_PORT="8080"
export PROXY_USER="replace-with-user"
read -r -s -p "Proxy password: " PROXY_PASS
printf '\n'

curl --proxy "http://${PROXY_HOST}:${PROXY_PORT}" \
  --proxy-user "${PROXY_USER}:${PROXY_PASS}" \
  "https://example.com/"

unset PROXY_PASS

Việc trích dẫn ngăn chặn các khoảng trắng, dấu đô la, dấu chấm than và các ký tự shell khác bị giải thích lại. Không gõ một mật khẩu thực trực tiếp vào một lệnh shell chia sẻ, vé, ảnh chụp màn hình hoặc kho lưu trữ.
Các tham số dòng lệnh có thể hiển thị cho việc kiểm tra quy trình cục bộ. Để tự động hóa, nên sử dụng một trình quản lý bí mật mà tiêm vào một giá trị ngắn hạn vào một công việc riêng biệt. Nếu bạn sử dụng tệp cấu hình cURL, hãy hạn chế quyền của nó và giữ nó bên ngoài kiểm soát phiên bản:

text Copy
proxy = "http://proxy.example.com:8080"
proxy-user = "replace-with-user:replace-with-password"
connect-timeout = 10
max-time = 30
show-error

Trên macOS hoặc Linux, hãy thiết lập quyền với chmod 600 proxy.conf, sau đó chạy curl --config proxy.conf https://example.com/. Xóa hoặc xoay vòng thông tin xác thực nếu tệp bị lộ.

Thiết lập biến môi trường Proxy

cURL nhận biết các biến môi trường cho các ứng dụng nên chia sẻ định tuyến proxy:

bash Copy
export http_proxy="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export ALL_PROXY="socks5h://proxy.example.com:1080"
export NO_PROXY="localhost,127.0.0.1,.internal.example.com"

curl "https://example.com/"

Hình thức http_proxy viết thường là có chủ ý. cURL chỉ chấp nhận viết thường cho biến đó như một biện pháp an ninh, trong khi các biến proxy khác có thể được viết hoa. ALL_PROXY hoạt động như một phương án dự phòng; các biến đặc thù theo giao thức có ưu tiên hơn.

Hướng dẫn biến môi trường cURL mọi thứ ghi lại các quy tắc về trường hợp và NO_PROXY phân loại.

Sử dụng các biến môi trường cho các công việc có kiểm soát, không phải như một cài đặt máy tính để bàn toàn cầu mà bạn quên là đang hoạt động. Kiểm tra chúng khi một yêu cầu bất ngờ sử dụng một proxy.

Loại trừ các máy chủ đã chọn khỏi định tuyến Proxy

Sử dụng --noproxy cho một lệnh:

bash Copy
curl --proxy "http://proxy.example.com:8080" \
  --noproxy "localhost,127.0.0.1,.internal.example.com" \
  "https://internal.example.com/health"

Một tên máy chủ chính xác khớp với máy chủ đó. Một miền bắt đầu bằng dấu chấm khớp với miền và các miền con của nó. Một dấu hoa thị vô hiệu hóa định tuyến cho tất cả các máy chủ, điều này chỉ hữu ích cho việc chẩn đoán.

Đối xử với danh sách loại trừ như một chính sách. Một hậu tố rộng có thể định tuyến các đích nhạy cảm hoặc nội bộ ra ngoài cổng mong muốn.

Cấu hình cURL Proxy trên Windows

Các tùy chọn cURL tự chúng là đa nền tảng. Chỉ có môi trường và cú pháp trích dẫn thay đổi.

Trong PowerShell:

powershell Copy
$env:http_proxy = "http://proxy.example.com:8080"
$env:HTTPS_PROXY = "http://proxy.example.com:8080"
$env:NO_PROXY = "localhost,127.0.0.1,.internal.example.com"

curl.exe --proxy "http://proxy.example.com:8080" `
  --proxy-user "replace-with-user:replace-with-password" `
  --show-error `
  "https://example.com/"

Remove-Item Env:http_proxy, Env:HTTPS_PROXY, Env:NO_PROXY

Sử dụng curl.exe trong các môi trường PowerShell của Windows nơi curl có thể chuyển đổi thành một lệnh khác. Trong Command Prompt, các biến sử dụng %NAME%; cho tự động hóa lặp lại, ưu tiên PowerShell hoặc tệp cấu hình cURL đã được bảo vệ.

Xác minh IP thoát Proxy

Ghi lại một phản hồi điều khiển trực tiếp trước, sau đó thực hiện cùng một yêu cầu qua proxy:

bash Copy
curl --silent --show-error "https://httpbin.org/ip"

curl --silent --show-error \
  --proxy "http://proxy.example.com:8080" \
  "https://httpbin.org/ip"

Các giá trị IP khác nhau cho thấy rằng định tuyến đã thay đổi. Chúng không chứng minh được quốc gia yêu cầu, hành vi phiên, mức độ ẩn danh, hoặc thành công của trang mục tiêu.

Để kiểm tra chấp nhận thực sự, kiểm tra tất cả các điều sau đây:

  • cURL thoát thành công;
  • trạng thái HTTP như mong đợi;
  • nội dung chứa một dấu hiệu cần thiết;
  • IP hoặc khu vực thoát đáp ứng chính sách nhiệm vụ;
  • giải quyết DNS xảy ra ở phía mong muốn;
  • không có máy chủ không được phê duyệt xuất hiện trong đầu ra kết nối chi tiết.

Bạn có thể in trạng thái và địa chỉ đối tác từ xa mà không cần lưu nội dung:

bash Copy
curl --output /dev/null --silent --show-error \
  --write-out 'status=%{http_code} peer=%{remote_ip}\n' \
  --proxy "http://proxy.example.com:8080" \
  "https://example.com/"

Các lỗi cURL Proxy phổ biến

407 Proxy Authentication Required

Proxy không chấp nhận thông tin xác thực đã cung cấp hoặc tài khoản/kênh không thể phục vụ yêu cầu. Xác nhận định dạng tên người dùng, mật khẩu, trạng thái kênh và phương thức xác thực được phép. Giữ các lỗi 401 của trang đích tách biệt với các lỗi 407 của proxy.

Đã hết thời gian kết nối

Kiểm tra tên máy chủ proxy, cổng, tường lửa, xung đột VPN và liệu điểm cuối có mong đợi HTTP, HTTPS, hay SOCKS không. Sử dụng --connect-timeout để giới hạn thiết lập kết nối và --max-time để giới hạn toàn bộ hoạt động.

Lỗi chứng chỉ Proxy

Đối với một proxy HTTPS, đảm bảo rằng tên máy chủ proxy khớp với chứng chỉ của nó và CA đúng được tin cậy. Tùy chọn CA đích và tùy chọn CA proxy bảo vệ các kết nối TLS khác nhau.

Could not resolve host

Nếu thông điệp chỉ tên đích trong khi sử dụng socks5://, hãy chuyển sang socks5h:// khi DNS phía proxy được mong đợi. Nếu nó chỉ tên proxy, hãy sửa DNS cục bộ hoặc tên máy chủ proxy.

Yêu cầu trực tiếp hoạt động nhưng yêu cầu proxy thất bại

So sánh đầu ra chi tiết, chính sách mục tiêu, vị trí proxy, giao thức, và dấu hiệu nội dung. Một điểm cuối IP thoát có thể hoạt động trong khi mục tiêu thực tế từ chối lưu lượng, vì vậy luôn luôn kiểm tra tên máy chủ sản xuất được phép một cách riêng biệt.

Sử dụng cURL với các Proxy Không Mảnh

Trang sản phẩm Giải pháp Proxy Không Mảnh đề cập đến các tùy chọn ISP tĩnh, datacenter, residential và IPv6. Tạo một kênh trong bảng điều khiển Scrapeless, sau đó sao chép cổng tạo ra, tên người dùng, và mật khẩu. Đừng tự tạo định dạng tên người dùng; nó có thể bao gồm loại proxy, vị trí, và các tham số phiên được chọn cho kênh đó.

Thiết lập các giá trị đã được tạo ra như các biến được bảo vệ:

bash Copy
export SCRAPELESS_PROXY_HOST="gw-us.scrapeless.io"
export SCRAPELESS_PROXY_PORT="8789"
export SCRAPELESS_PROXY_USER="replace-with-generated-username"
read -r -s -p "Scrapeless proxy password: " SCRAPELESS_PROXY_PASS
printf '\n'

curl --proxy "http://${SCRAPELESS_PROXY_HOST}:${SCRAPELESS_PROXY_PORT}" \
  --proxy-user "${SCRAPELESS_PROXY_USER}:${SCRAPELESS_PROXY_PASS}" \
  --connect-timeout 10 \
  --max-time 30 \
  --show-error \
  "https://httpbin.org/ip"

unset SCRAPELESS_PROXY_PASS

Cổng ở trên là một điểm cuối ở Mỹ được tài liệu hóa hiện tại; hãy chọn điểm cuối gần nhất với ứng dụng của bạn từ bảng điều khiển hoặc tài liệu hiện tại. Địa lý thoát được kiểm soát riêng biệt qua các tham số tên người dùng đã được tạo ra.
Theo hướng dẫn thiết lập proxy của Scrapeless để tạo một kênh, sau đó sử dụng tham chiếu tính năng proxy cho các trường cổng và vị trí hiện tại.

Nếu bạn đang chọn giữa các loại địa chỉ, hướng dẫn proxy trung tâm dữ liệu so với residential giải thích các phương án hoạt động. Xem giá Scrapeless để biết các điều khoản hiện tại.

Danh sách kiểm tra Proxy cURL

  • Xác nhận rằng mục tiêu và proxy được ủy quyền cho nhiệm vụ.
  • Khớp sơ đồ URL proxy với điểm cuối của nhà cung cấp.
  • Sử dụng socks5h:// khi DNS phía proxy được yêu cầu.
  • Giữ thông tin đăng nhập bên ngoài URL, nhắc nhở, nhật ký và kho lưu trữ.
  • Đặt dấu ngoặc cho mọi biến có thể chứa ký tự đặc biệt.
  • Giới hạn kết nối và tổng thời gian.
  • Đặt NO_PROXY hoặc --noproxy một cách hẹp.
  • So sánh một điều khiển trực tiếp với phản hồi qua proxy.
  • Xác nhận nội dung mong đợi, không chỉ địa chỉ IP ra.
  • Loại bỏ các chẩn đoán dài dòng khỏi các nhật ký bình thường.

Tạo một kênh proxy Scrapeless và thử nghiệm trước với một điểm cuối công khai mà bạn được phép truy cập.

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

Q: Cú pháp proxy cURL là gì?

Sử dụng curl --proxy "scheme://host:port" "https://target.example.com/". Dạng ngắn là curl -x "scheme://host:port" "https://target.example.com/".

Q: Làm thế nào tôi có thể thêm tên người dùng và mật khẩu cho proxy?

Sử dụng --proxy-user "username:password" và giữ thông tin đăng nhập ra khỏi URL proxy. Trong tự động hóa, chèn các giá trị từ kho bí mật được bảo vệ.

Q: Sự khác biệt giữa socks5://socks5h:// là gì?

Với socks5://, cURL giải quyết tên máy chủ mục tiêu tại chỗ. Với socks5h://, proxy SOCKS5 giải quyết nó.

Q: Tôi có thể sử dụng proxy HTTP cho một trang web HTTPS không?

Có. cURL thường sử dụng HTTP CONNECT để tạo một đường hầm qua proxy HTTP, sau đó thực hiện TLS với đích HTTPS.

Q: Làm thế nào tôi có thể vô hiệu hóa proxy cho một máy chủ?

Sử dụng --noproxy "host.example" cho một lệnh hoặc thêm máy chủ vào NO_PROXY. Giữ danh sách hẹp và xem xét các khớp đuôi miền.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục