Tá an VPN suas, osclaíonn an deais inmheánach i mbrabhsálaí, agus ardaíonn an script Python earráid seachfhreastalaí fós. Níl aon rud mícheart leis an tollán sa phictiúr sin: léann an t-idirbhreathnóir seoladh seachfhreastalaí óna thimpeallacht féin agus seolann sé an iarratas ansin. Léann an lámhleabhar seo an timpeallacht a fheiceann an próiseas i ndáiríre, cuireann sé an t-eisiamh is cúinge i bhfeidhm agus ní mheabhraíonn sé polasaí seisiúin sainráite go dtí sin. Críochnaíonn gach céim le ordú a gcinnfidh a aschur an leanfaidh tú ar aghaidh.

Léigh an timpeallacht a fheiceann an próiseas i ndáiríre

Is trí fhoinse dhifriúla iad socruithe seachfhreastalaí an deisce, easpórtálacha an bhlaosc agus línte Environment= aonaid systemd, agus ní léann Requests ach an ceann deireanach a fhaigheann sé le hoidhreacht. Rith an diagnóis thíos sa bhlaosc, sa choimeádán nó san aonad céanna a ritheann an script atá ag teip, ní i do theirmeanal idirghníomhach. Tá athróg a easpórtáiltear i do bhlaosc logála isteach dofheicthe do phróiseas coimeádáin, agus míníonn an bhearna sin go leor tuarascálacha faoi sheachfhreastalaí a fheictear as láthair na háite. Priontálann an dá ordú na sonraí céanna ag leibhéil mhionsonraí éagsúla.

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()]"

Léitear an dá litriú de gach athróg, agus cuirtear iontrálacha dúblacha i bhfeidhm san ord inar fhuair an próiseas iad, mar sin féadann HTTP_PROXY atá as dáta an luach a d'easpórtáil tú anois beag a shárú. Tá tábhacht ag baint le hathróga beartán CA anseo freisin, mar athraíonn siad cad chuig a réitíonn verify gan a bheith le feiceáil áit ar bith sa chód. Má tá an t-aschur folamh, ní hé an timpeallacht do fhadhb agus féadfaidh tú stopadh ag léamh an ailt seo. Má liostaíonn sé seachfhreastalaí nach n-aithníonn tú, faigh an comhad nó an t-aonad a shocraíonn é sula n-athraíonn tú rud ar bith.

Fiafraigh de Requests cad a dhéanfadh sé le URL ar leith. Taispeánann an glao seo na luachanna comhcheangailte seachfhreastalaí, verify agus cert don iarratas sin gan paicéad a sheoladh.

python3 -c "import requests;s=requests.Session();print(s.merge_environment_settings('https://api.corp.example/status',{},None,None,None))"

Is é iontráil proxies neamhfholamh don óstach príobháideach do fhreagra, agus insíonn an luach verify clóite cé acu beartán CA a mbeadh muinín ag an iarratas as. Má fhéachann an dá rud ceart, tá an teip níos déanaí sa chruach agus ba cheart duit léim chuig an alt fíoraithe. Ná déan buille faoi thuairim ón gcód: tarlaíonn an chumasc in aghaidh an iarratais, agus sin an fáth gur féidir le seisiún amháin iompar go difriúil do dhá óstach.

Eisigh an t-óstach príobháideach sula ndíchumasaíonn tú rud ar bith

Nuair a bhíonn an seachfhreastalaí de dhíth i ndáiríre ar chinn scríbe eile, is é an deisiú cúng eisiamh don óstach seo. Cuir leis an liosta atá ann cheana seachas é a athsholáthar, mar scriosfaidh glanadh NO_PROXY gach ceann scríbe inmheánach eile a bhí ag brath air. Cuireann na horduithe thíos an iontráil leis agus ansin fiafraíonn siad de Requests an bhfuil an seachbhóthar i bhfeidhm.

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))"

Déantar meaitseáil de réir iarmhír óstaigh, mar sin clúdaíonn .corp.example an fearann iomlán agus clúdaíonn api.corp.example ainm amháin. Díchumasaíonn réalta lom seachfhreastalaí do gach óstach agus is annamh a bhíonn sí mar a theastaíonn ó phost táirgeachta. Braitheann cé acu a urramaítear iontráil CIDR ar na leaganacha Requests agus urllib3 san íomhá, mar sin tástáil an iontráil bheacht seachas glacadh leis go n-oibríonn sí. Seiceáil toradh should_bypass_proxies don URL iarbhír, ní d'ainm óstaigh a chlóscríobh tú ó chuimhne.

Coinnigh an dá shraith óna chéile i do cheann. Ní sheachnaíonn seachbhóthar an tseachfhreastalaí HTTP an VPN, mar tarlaíonn cinneadh an tseachfhreastalaí sa leabharlann agus tarlaíonn cinneadh an tolláin i dtábla ródaithe an eithne.

Ná díchumasaigh trust_env ach amháin mar pholasaí seisiúin d'aon ghnó

Más gá don phost iomlán neamhaird a dhéanamh den chumraíocht thimpeallach, tóg an seisiún go sainráite agus taifead an cinneadh sa chód. Is polasaí é sin, ní seachbhóthar, agus baineann sé le diff a fheiceann léitheoir. Coinníonn an sampla thíos teorann ama, cosán CA sainráite agus seiceáil stádais.

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()

Athraíonn díchumasú trust_env trí iompar ag an am céanna, agus ní bhaineann ach ceann acu le seachfhreastalaí. Stopann Requests ag léamh dintiúirí .netrc, agus stopann na hathróga REQUESTS_CA_BUNDLE agus CURL_CA_BUNDLE ag dul i bhfeidhm ar verify, a thiteann ansin ar ais chuig an stór teastas atá cuachta isteach. Má chríochnaíonn do eagraíocht TLS lena CA féin, ardaíonn an t-aischur sin earráid fíoraithe a bhféadfadh cuma neamhghaolmhar a bheith uirthi leis an athrú a rinne tú anois beag. Is é seachadadh sainráite verify a choinníonn an dá éifeacht ar leithligh.

Is é rud nár cheart duit a dhéanamh verify=False a shocrú chun an earráid a eascraíonn as a chiúnú. Malartaíonn sin mí-chumraíocht seachfhreastalaí ar nasc neamhfhíoraithe, agus ceileann sé an fhadhb teastais a bhí le nochtadh ag an eisiamh.

Fíoraigh an tsraith atá ag teip agus coinnigh bealach chun aisghabhála

Féachann trí theip cosúil lena chéile i log agus níl aon rud i gcoiteann acu: ardaíonn seachfhreastalaí nach sroicheann an ceann scríbe ProxyError nó filleann sé 502, ardaíonn fadhb mhuiníne SSLError, agus filleann diúltú iarratais 401 nó 403. Atáirg an t-iarratas lasmuigh de Requests chun a fheiceáil cé acu atá agat. Bainfidh na horduithe thíos an seachfhreastalaí, tástálfaidh siad an slabhra teastas agus ansin déanfaidh siad an glao arís tríd an leabharlann.

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)"

Má éiríonn leis an nglao curl agus má theipeann ar an nglao Python, is í an timpeallacht an difríocht fós. Má theipeann ar an dá rud ag céim TLS, ní raibh an seachfhreastalaí riamh mar an fhadhb agus is é an slabhra teastas atá ann. Má fhilleann an dá rud 401, shroich an t-iarratas an feidhmchlár agus is é an fíordheimhniú an obair atá fágtha. Sábhálann sé uair an chloig don chéad duine eile a thaifeadadh cé acu de na trí a chonaic tú.

Is líne amháin é an t-aischur sa dá threo: bain an t-eisiamh, nó cas trust_env ar ais. Sábháil an luach NO_PROXY roimhe sin sula gcuireann tú leis, agus b'fhearr script fillte nó iontráil Environment= ag leibhéal aonaid ná easpórtáil a mhaireann i stair do theirminéil amháin. Tá an dá athrú le feiceáil i dtimpeallacht an phróisis, mar sin tugann atosú tú ar ais chuig an sean-iompar de ghnáth.

Críochnaigh trí cheithre rud a dheimhniú: ní thaispeánann na socruithe comhcheangailte don URL príobháideach aon seachfhreastalaí, deimhníonn an teastas i gcoinne an CA atá beartaithe, filleann an t-iarratas an stádas a bhfuil súil agat leis, agus tá an t-athrú tiomanta áit a bhfuil sé inatáirgthe. Is éard is script glas le timpeallacht gan mhíniú ná deisiú a bhriseann arís ar an gcéad mheaisín eile. Is iad na horduithe sa lámhleabhar seo na cinn le greamú sa ticéad.

Ailt ghaolmhara