Vì sao curl bỏ qua HTTP_PROXY
Hiểu ngoại lệ HTTP_PROXY có chủ đích của curl, các biến theo giao thức, ALL_PROXY và cách kiểm tra proxy qua biến môi trường một cách dễ dự đoán.
Với đích HTTP, hãy đặt http_proxy bằng chữ thường. curl cố ý bỏ qua HTTP_PROXY bằng chữ hoa. Trong shell POSIX:
http_proxy=http://127.0.0.1:8080 curl http://example.com/
https_proxy=http://127.0.0.1:8080 curl https://example.com/Các phép gán này chỉ áp dụng cho lệnh ngay sau chúng. Thay địa chỉ lắng nghe trong ví dụ bằng proxy của bạn; để so sánh các điểm cuối công khai, chọn một ứng viên từ danh sách proxy HTTP. Biến https_proxy chọn tuyến cho đích HTTPS; giá trị dùng http:// vẫn có nghĩa là proxy HTTP thông thường có thể tạo đường hầm tới đích. PowerShell và các shell lệnh Windows sử dụng cú pháp gán khác.
Vì sao chính cách viết hoa này lại nguy hiểm
Môi trường CGI có thể chuyển các tiêu đề của yêu cầu đến thành biến HTTP_ viết hoa. Vì vậy, tiêu đề tên Proxy có thể trở thành HTTP_PROXY. Tin cậy nó như cấu hình kết nối đi ra sẽ cho phép dữ liệu yêu cầu chọn proxy. Yêu cầu dùng chữ thường của curl tránh ánh xạ này; ngoại lệ không áp dụng hoàn toàn giống nhau cho HTTPS và các biến giao thức khác.
Nếu đổi biến mà tuyến không thay đổi
Trước tiên tìm biến dành riêng cho giao thức, rồi đến biến dự phòng ALL_PROXY. Quy tắc NO_PROXY phù hợp có thể bỏ qua proxy. Các dạng chữ thường và những định nghĩa cạnh tranh cũng quan trọng. Vòng lặp shell kiểu Unix này chỉ báo sự hiện diện mà không in các giá trị có thể chứa thông tin xác thực:
for name in http_proxy HTTP_PROXY https_proxy HTTPS_PROXY all_proxy ALL_PROXY no_proxy NO_PROXY; do
if printenv "$name" >/dev/null; then
printf '%s is set\n' "$name"
fi
doneKiểm tra các định nghĩa được liệt kê ngay trên máy. Nếu một định nghĩa xuất hiện trở lại, kiểm tra cấu hình shell khởi chạy, dịch vụ, IDE, container hoặc CI. Sự hiện diện cho biết các đầu vào có thể có; không cho biết giá trị nào được ưu tiên.
Để tách một yêu cầu khỏi các lựa chọn proxy đó, cung cấp cả điểm cuối lẫn danh sách bỏ qua rỗng:
curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/Để so sánh bằng kết nối trực tiếp khi được phép:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Các lệnh này giúp phân biệt tuyến được kế thừa với lỗi kết nối. Đọc kết quả kiểm tra proxy theo từng giai đoạn trước khi thay đổi thêm thiết lập môi trường. Hãy áp dụng quy tắc biến của curl cho curl; môi trường chạy riêng của ứng dụng có thể phát hiện và hợp nhất proxy theo cách khác.