د pip check_hostname تېروتنه د پراکسي شاته: pip که ټنل؟
دوه بېلابېلې ناکامۍ د پراکسي شاته هماغه pip د کوربه نوم تېروتنه چاپوي۔ زوړ کلاینټ له هغه پراکسي چې ترافیک بیا لاسلیک کوي جلا کړئ او سمه طبقه ورغوئ۔
دوه بېلابېلې خرابۍ هماغه pip ردپه چاپوي، او هغه سمون چې یوې ته ځي بلې ته زیان رسوي۔ هغه کلاینټ چې د ټنل شوي کوربه نومولو لپاره ډېر زوړ دی، اپ گریډ ته اړتیا لري۔ هغه پراکسي چې ترافیک بیا لاسلیک کوي، باوري ریښه سند ته اړتیا لري، نه د نسخې کمول۔ مخکې له دې چې د پراکسي بدلونکې سمه کړئ، معلومه کړئ چې له دغو دواړو کوم یو لرئ، ځکه لارې مخالف لوري ته ځي۔
د ترتیباتو له لمس کولو مخکې وروستي چوکاټونه ولولئ
چېرې چې ردپه پای ته رسېږي، هغه درته وایي چې کومه طبقه تسلیم شوه۔ که وروستي چوکاټونه په pip کې د urllib3 TLS کوډ دننه وي او متن د کوربه نوم شکایت کوي، کلاینټ کتابتون نشو کولی د تصدیق یو پړاو بشپړ کړي، او دا د سند له ستونزې ډېر ځله د نسخې ستونزه ده۔ که متن پرځای یې د رد شوي اړیکې، نه حل شوې پراکسي نوم یا HTTP 407 تېروتنې راپور ورکړي، د ټنل پای ټکی ګناهکار دی او هېڅ اپ گریډ به یې نه بدلوي۔
د pip نسخه او پراکسي بدلونکې په هماغه شیل کې ثبت کړئ چې ناکامېږي۔ هغه شیل چې د ټنل له پورته کېدو مخکې پرانیستل شوی وي، له هغه چې وروسته پرانیستل شوی وي بېل ارزښتونه لري، او د دوی ترمنځ توپیر ډېری وخت ټوله تشخیص وي۔
python3 -m pip --version
env | grep -i -E 'proxy|no_proxy'
کله چې کلاینټ له ټنله زوړ وي
زوړې pip خپرونې یو HTTPS سټک درلود چې کله سوکیټ په ټنل پوښل شو، د منزل کوربه نوم یې له لاسه ورکړ۔ د check_hostname پیغام هغه څه دي چې دا سټک یې باسي کله چې د پرتله کولو لپاره نوم پرته تصدیق ته ورسیږي۔ اپ گریډ خرابي لرې کوي ځکه نوی کلاینټ د لاس ورکولو په اوږدو کې نوم ساتي، او بدلون دومره ارزان دی چې لومړی یې وآزموی، هر کله چې وروستي چوکاټونه ملګري TLS کوډ ته اشاره وکړي۔
که له ناکامې ماشین څخه انډیکس ته لاسرسی نه وي، په هغه کوربه چې کولی شي اوسنی wheel راکښته کړئ او له فایل څخه یې نصب کړئ۔ هغه فایل نوم وکاروئ چې واقعاً مو ډاونلوډ کړی، نه هغه نسخه چې له بلاگ پوسټ څخه کاپي شوې۔
python3 -m pip install --upgrade pip
python3 -m pip install ./pip-24.2-py3-none-any.whl
کله چې پراکسي ترافیک بیا لاسلیک کوي
هغه پراکسي چې TLS پای ته رسوي او سندونه د کارپوریټ ریښې لاندې بیا صادروي، بېله تېروتنه پیدا کوي: certificate verify failed، نه د کوربه نوم شکایت۔ همدا توپیر نښه ده، ځکه کلاینټ سرور ته ورسېد او بیا یې هغه هویت رد کړ چې ورته ښودل شوی و۔ سمون دا دی چې پر هغه ریښې په ښکاره توګه باور وکړئ، که د یوې امر لپاره وي یا د PIP_CERT بدلونکې له لارې، ترڅو کلاینټ وکولی شي هغه څه ته زنځیر جوړ کړي چې پراکسي یې وړاندې کوي۔ ریښه د سیستم باور زېرمې ته ورزیاتول هم کار کوي، خو دا د ماشین په هر پروګرام کې باور بدلوي، او دا د یوې بستې نصب سمولو څخه لویه پریکړه ده۔
--trusted-host د تشخیص په توګه وساتئ، هېڅکله د تلپاتې حالت په توګه نه۔ هغه تصدیق بندوي چې تاسو یې ساتل غوښتل، نو واقعاً غلط سند وروسته روغ ښکاري۔ که یې د یوې بستې د نصبولو لپاره کارولی وي، لرې یې کړئ او د راتلونکې خپرېدو مخکې زنځیر سم کړئ۔
ستاسو خپل Python کوډ د pip ترتیبات په بشپړه توګه له پامه غورځوي۔ requests غوښتنې ته اړتیا ده چې پراکسي او بنډل هغه ځای ته وسپارل شي چې هغه ناسته یې ویني، له همدې کبله لاندې بلاک دواړه د ناستې شي ته ټاکي۔
pip install --cert /usr/local/share/ca-certificates/corp-root.crt requests
export PIP_CERT=/usr/local/share/ca-certificates/corp-root.crt
s = requests.Session()
s.proxies = {"https": "http://10.20.30.40:8080"}
s.verify = "/usr/local/share/ca-certificates/corp-root.crt"
s.get("https://pypi.org/simple/", timeout=15)
کله چې پای ټکی یا پورټ غلط وي
د ټنل کلاینټ ډېری وخت د نښلېدو پر مهال د سیستم پراکسي بیا لیکي، چې pip کېدای شي په هغه کوربه نښه پاتې شي چې پر هغه پورټ هېڅکله ځواب نه وایي۔ د هر pip ترتیب له بدلولو مخکې پای ټکی له هغه کلاینټ سره وآزموی چې pip نه وي۔ که curl په هماغه پراکسي دلیل ناکام شي، خرابي له pip پورته ده او د pip دننه هېڅ ترتیب به مرسته ونه کړي۔
د امر جھنډ او د چاپېریال بدلونکې بېلو دایرتو ته یوه خبره وایي: جھنډ یوې غوښتنې ته، بدلونکې هغه هر بهیر ته چې وروسته پیل شي۔ د داخلي انډیکس لپاره NO_PROXY ورزیات کړئ، ترڅو شخصي بسته ایز ترافیک د ټنل له لارې تاوېدل پرېږدي۔
curl -x http://proxy.corp.internal:8080 --head https://pypi.org/simple/
pip install --proxy http://proxy.corp.internal:8080 requests
ترتیب وساتئ او ثابته کړئ چې لار کار کوي
کله چې پراکسي باید له اوسني شیل اوږد پاتې شي، هغه د pip په خپل ترتیب کې وساتئ، بیا ولولئ چې pip واقعاً څه کاروي۔ د debug وتنۍ د هر ارزښت شاته فایل او بدلونکې نوموي، چې د لومړیتوب په اړه بحثونه د اسنادو له لوستلو ګړندي هواروي۔
تصدیق په قصد دوه کلاینټ کاروي۔ د معیاري کتابتون غوښتنه لار او باور زنځیر ثابته کوي، او ډاونلوډ ثابته کوي چې د pip خپل ترتیب له دوی سره سمون لري۔ کله چې لومړی بریالی او دویم ناکام شي، توپیر د شبکې په داخل کې نه، د pip دننه دی۔
pip config set global.proxy http://proxy.corp.internal:8080
pip config debug
python3 -c "import urllib.request as r; print(r.urlopen('https://pypi.org/simple/').status)"
pip download --no-deps -d /tmp/wheelcheck requests
| What you see | First command | Repair |
|---|---|---|
| hostname message inside vendored TLS frames | python3 -m pip --version | upgrade the client |
| certificate verify failed after the tunnel | curl -x http://proxy.corp.internal:8080 --head https://pypi.org/simple/ | trust the corporate root |
| connection refused or HTTP 407 | env | grep -i -E 'proxy|no_proxy' | correct host, port or credentials |