چرا curl متغیر HTTP_PROXY را نادیده میگیرد
استثنای عمدی curl برای HTTP_PROXY، متغیرهای ویژهٔ پروتکل، ALL_PROXY و روشی برای پیشبینیپذیر کردن آزمون پراکسی با متغیرهای محیطی.
برای مقصدهای HTTP، متغیر http_proxy را با حروف کوچک تنظیم کنید. curl عمداً HTTP_PROXY با حروف بزرگ را نادیده میگیرد. در پوستهٔ 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/این انتسابها فقط بر فرمان بلافاصله پس از خود اثر دارند. نشانی شنوندهٔ مثال را با پراکسی خود جایگزین کنید؛ برای مقایسهٔ نقاط پایانی عمومی، گزینهای از فهرست پراکسیهای HTTP انتخاب کنید. متغیر https_proxy مسیر مقصدهای HTTPS را انتخاب میکند؛ مقدار دارای http:// همچنان به معنای یک پراکسی عادی HTTP است که میتواند تا مقصد تونل برقرار کند. PowerShell و پوستههای فرمان ویندوز از نحو انتساب متفاوتی استفاده میکنند.
چرا دقیقاً این نگارش با حروف بزرگ خطرناک است
محیطهای CGI میتوانند سرآیندهای درخواست ورودی را به متغیرهای HTTP_ با حروف بزرگ تبدیل کنند. بنابراین سرآیندی به نام Proxy میتواند به HTTP_PROXY تبدیل شود. اعتماد به آن بهعنوان تنظیمات اتصال خروجی، اجازه میدهد دادههای درخواست پراکسی را انتخاب کنند. الزام curl به حروف کوچک از این نگاشت جلوگیری میکند؛ این استثنا برای HTTPS و متغیرهای دیگر پروتکلها دقیقاً به همین شکل اعمال نمیشود.
اگر تغییر متغیر مسیر را تغییر نمیدهد
ابتدا متغیر ویژهٔ پروتکل و سپس گزینهٔ جایگزین ALL_PROXY را بررسی کنید. یک قاعدهٔ منطبق در NO_PROXY میتواند پراکسی را دور بزند. شکلهای با حروف کوچک و تعریفهای رقیب نیز مهماند. این حلقه برای پوستههای شبهیونیکس فقط وجود متغیرها را گزارش میکند و مقادیری را که ممکن است حاوی اطلاعات ورود باشند چاپ نمیکند:
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
doneتعریفهای فهرستشده را محلی بررسی کنید. اگر یکی دوباره ظاهر میشود، تنظیمات پوستهٔ راهانداز، سرویس، IDE، کانتینر یا CI را بررسی کنید. وجود متغیر ورودیهای احتمالی را مشخص میکند، نه اینکه کدام مقدار غالب شده است.
برای جدا کردن یک درخواست از این انتخابهای پراکسی، هم نقطهٔ پایانی و هم فهرست دور زدن خالی را مشخص کنید:
curl --proxy http://127.0.0.1:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/برای مقایسه با اتصال مستقیم، در صورتی که مجاز باشد:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/این فرمانها به تفکیک مسیر بهارثرسیده از خرابی اتصال کمک میکنند. پیش از تغییر تنظیمات محیطی بیشتر، نتایج آزمون پراکسی را مرحلهبهمرحله بخوانید. قواعد متغیرهای curl را به curl اعمال کنید؛ محیط اجرای خود برنامه ممکن است پراکسیها را به شیوهٔ دیگری کشف و ترکیب کند.