ProxyError Requests ee API gaar ah? Marka hore hubi deegaanka
Requests wuxuu isku daraa proxy, auth iyo CA ee deegaanka. Akhri waxa habka arko, ka saar martigeliyaha gaarka ah oo ka tag xaqiijinta TLS oo shidan.
VPN waa shidan yahay, dashboard-ka gudaha ayaa furmaya browser-ka, haddana qoraalka Python wuxuu wali tuurayaa qalad proxy. Sawirkaas tunnel-ka waxba kama qaldana: turjumaanku wuxuu cinwaanka proxy ka akhriyaa deegaankiisa oo u diraa codsiga halkaas. Hagahan wuxuu akhriyaa deegaanka habku dhab ahaan arko, wuxuu ku dabaqaa ka-reebista ugu cidhiidhisan, ka dibna kaliya wuxuu tixgeliyaa siyaasad fadhi oo cad. Tallaabo kastu waxay ku dhammaataa amar ay natiijadiisu go'aamiso inaad sii waddo iyo in kale.
Akhri deegaanka habku dhab ahaan arko
Dejinta proxy desktop-ka, dhoofinta shell iyo sadarrada Environment= ee unug systemd waa saddex ilo oo kala duwan, Requests-na wuxuu akhriyaa kaliya kan ugu dambeeya ee uu dhaxlo. Ku socodsii ogaanshaha hoose isla shell, konteenar ama unugka socodsiiya qoraalka guuldaraysta, ma aha terminal-kaaga isdhexgalka. Doorsoomaha lagu dhoofiyo shell-kaaga gelitaanka waa mid aan la arki karin hab konteenar, farqigaasna wuxuu sharaxaa warbixinno badan oo ku saabsan proxy meel kasta ka soo muuqda. Labada amarba waxay daabacaan isla xogta heerar faahfaahin oo kala duwan.
env | grep -i -E 'proxy|requests_ca_bundle|curl_ca_bundle'
python3 -c "import os;[print(k,'=',v) for k,v in sorted(os.environ.items()) if 'proxy' in k.lower()]"
Labada higgaad ee doorsoome kasta waa la akhriyaa, oo qoraallada nuqulka ah waxaa lagu dabaqaa sida ay habku u helay, sidaas darteed HTTP_PROXY duugoobay wuxuu dhaafi karaa qiimaha aad hadda dhoofisay. Doorsoomayaasha xirmada CA halkan sidoo kale way muhiim yihiin, maxaa yeelay waxay beddelaan waxa verify ku xalliyo iyagoon ka muuqan meel kasta oo koodhka ah. Haddii natiijadu madhan tahay, deegaanku maaha dhibaatadaada oo waad joojin kartaa akhrinta qaybtaan. Haddii ay liis gasho proxy aadan aqoon, ka hor inta aadan wax beddelin raadi faylka ama unugka dejiya.
Weydii Requests waxa uu ku samayn lahaa URL gaar ah. Wicitaankani wuxuu muujinayaa qiimaha proxy, verify iyo cert ee isku dhafan ee codsigaas isagoon dirin xirmo.
python3 -c "import requests;s=requests.Session();print(s.merge_environment_settings('https://api.corp.example/status',{},None,None,None))"
Qoraal proxies aan madhnayn oo loogu talagalay martigeliyaha gaarka ah waa jawaabtaada, qiimaha verify ee la daabacayna wuxuu sheegayaa xirmada CA ee codsigu aamini lahaa. Haddii labaduba sax u muuqdaan, guuldarradu waa mar dambe oo xirmada ah oo waa inaad u gudubtaa qaybta xaqiijinta. Ha ka mala-awaalin koodhka: isku darku wuxuu dhacaa codsi kasta, taasina waa sababta fadhi keliya ugu dhaqmi karo si kala duwan laba martigeliye.
Ka saar martigeliyaha gaarka ah ka hor inta aadan wax damin
Marka proxy si dhab ah loogu baahan yahay meelo kale, hagaajinta cidhiidhisan waa ka-reebis martigeliyahan. Ku dar liiska jira halkii aad ka beddeli lahayd, maxaa yeelay tirtirka NO_PROXY wuxuu jebiyaa meel kasta oo gudaha ah oo ku tiirsanayd. Amarrada hoose waxay ku daraan qoraalka ka dibna weydiiyaan Requests in ka-boodku khusaado.
export NO_PROXY="${NO_PROXY:+$NO_PROXY,}api.corp.example,.corp.example"
python3 -c "import requests;print(requests.utils.should_bypass_proxies('https://api.corp.example/status',None))"
Isku-dhiggu waa iyadoo loo eegayo dabo-martigeliye, sidaas darteed .corp.example wuxuu daboolaa domain-ka oo dhan halka api.corp.example uu daboolo hal magac. Xiddig qaawan wuxuu damiyaa proxy martigeliye kasta oo marar badan maaha waxa shaqo wax-soo-saar rabto. In qoraal CIDR la ixtiraamo waxay ku xidhan tahay noocyada Requests iyo urllib3 ee sawirka, sidaas darteed tijaabi qoraalka saxda ah halkii aad ka malayn lahayd inuu shaqeeyo. Hubi natiijada should_bypass_proxies ee URL-ka dhabta ah, ma aha magac martigeliye aad xusuus ka qortay.
Labada lakab ku kala hay maskaxdaada. Ka-boodka proxy HTTP ma boodo VPN, maxaa yeelay go'aanka proxy wuxuu dhacaa maktabadda go'aanka tunnel-na wuxuu dhacaa shaxda wadada kernel-ka.
Dami trust_env kaliya sida siyaasad fadhi oo ula kac ah
Haddii shaqada oo dhan ay tahay inay iska indhatirto qaabeynta deegaanka, si cad u dhis fadhiga oo go'aanka ku qor koodhka. Taasi waa siyaasad, maaha marin-marin, waxayna ka tirsan tahay diff uu dib-u-eegisuhu arki karo. Tusaalaha hoose wuxuu hayaa waqti-go'an, waddo CA oo cad iyo hubinta xaaladda.
import requests
with requests.Session() as session:
session.trust_env = False
response = session.get(
"https://api.corp.example/status",
timeout=(5, 20),
verify="/etc/ssl/certs/corp-ca.pem",
)
response.raise_for_status()
Daminta trust_env waxay isku mar beddeshaa saddex dhaqan, kaliya midkoodna waa proxy. Requests wuxuu joojiyaa akhrinta aqoonsiga .netrc, doorsoomayaasha REQUESTS_CA_BUNDLE iyo CURL_CA_BUNDLE waxay joojiyaan saamaynta verify, kaas oo markaas ku noqda bakhaarka shahaadada ee ku lifaaqan. Haddii ururkaagu ku dhammeeyo TLS CA u gaar ah, dib-u-noqoshadaas waxay kicisaa qalad xaqiijin oo u muuqda mid aan la xidhiidhin isbeddelka aad hadda samaysay. Gudbinta cad ee verify waa waxa labada saameyn kala haysta.
Waxa aanad sameyn waa inaad dejiso verify=False si aad u aamusto qaladka ka dhasha. Taasi waxay ku beddelaysaa qaabayn proxy oo khaldan xidhiidh aan la xaqiijin, waxayna qarinaysaa dhibaatada shahaadada ee ka-reebistu ahayd inay daaha ka qaaddo.
Xaqiiji lakabka guuldaraysta oo hay fursad dib-u-noqosho
Saddex guuldarro ayaa log-ka isku eg oo waxba wadaag ma leh: proxy aan gaadhin meesha ayaa tuuraya ProxyError ama soo celinaya 502, dhibaato kalsooni ayaa tuuraya SSLError, iyo diidmo codsi oo soo celinaya 401 ama 403. Ku celi codsiga Requestska dibaddiisa si aad u aragto kee baad haysataa. Amarrada hoose waxay ka saaraan proxy, tijaabiyaan silsiladda shahaadada ka dibna ku celiyaan wicitaanka maktabadda.
curl -sv --noproxy '*' https://api.corp.example/status -o /dev/null
openssl s_client -connect api.corp.example:443 -servername api.corp.example </dev/null
python3 -c "import requests;r=requests.get('https://api.corp.example/status',timeout=10);print(r.status_code)"
Haddii wicitaanka curl guulaysto oo wicitaanka Python guuldarraysto, deegaanku wali waa farqiga. Haddii labaduba ku guuldarraystaan TLS, proxy waligiis ma ahayn dhibaatada oo silsiladda shahaadada ayaa dhibaatada. Haddii labaduba soo celiyaan 401, codsigu wuxuu gaadhay barnaamijka oo shaqada hadhay waa aqoonsiga. Qorista midka saddexda ah ee aad aragtay waxay badbaadinaysaa qofka xiga saacad.
Dib-u-noqoshadu waa hal sadar labada jiho: ka saar ka-reebista ama rog trust_env. Kaydi qiimaha hore ee NO_PROXY ka hor inta aadan wax ku darin, oo doorbid qoraal duuban ama qoraal Environment= heer unug ah halkii aad ka doorbid lahayd dhoofin ku nool oo kaliya taariikhda terminal-kaaga. Labada isbeddelba way ka muuqdaan deegaanka habka, sidaas darteed dib-u-bilaabid ayaa sida caadiga ah kuu soo celisa dhaqankii hore.
Ku dhammee adigoo xaqiijinaya afar arrimood: dejinta isku dhafan ee URL-ka gaarka ah ma muujiso proxy, shahaadadu waxay ku ansaxdaa CA-la doonayay, codsigu wuxuu soo celinayaa xaaladda aad filaysay, isbeddelkana waxaa lagu sameeyay meel dib loo soo saari karo. Qoraal cagaar ah oo deegaan aan la sharraxin waa hagaajin mar kale ku burburta mishiinka xiga. Amarrada hagahan waa kuwa aad ku dhajiso tikit-ka.