מדוע 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 ומעטפות הפקודות של Windows משתמשות בתחביר השמה אחר.
מדוע דווקא הכתיב הזה באותיות גדולות מסוכן
סביבות CGI יכולות להפוך כותרות של בקשות נכנסות למשתני HTTP_ באותיות גדולות. לכן כותרת בשם Proxy יכולה להפוך ל־HTTP_PROXY. הסתמכות עליה כתצורה לחיבורים יוצאים תאפשר לנתוני הבקשה לבחור פרוקסי. הדרישה של curl לאותיות קטנות מונעת את המיפוי הזה; החריג אינו חל באופן זהה על HTTPS ועל משתנים של פרוטוקולים אחרים.
אם שינוי המשתנה אינו משנה את הנתיב
חפשו קודם משתנה ייעודי לפרוטוקול ואחריו את חלופת ברירת המחדל ALL_PROXY. כלל תואם ב־NO_PROXY יכול לעקוף את הפרוקסי. גם גרסאות באותיות קטנות והגדרות מתחרות חשובות. הלולאה הזאת למעטפת דמוית Unix מדווחת על קיום משתנים בלי להדפיס ערכים שעשויים להכיל פרטי הזדהות:
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; סביבת הריצה של היישום עצמו עשויה לגלות ולשלב שרתי פרוקסי אחרת.