VPN wà ní ṣíṣí, pánẹ́ẹ̀lì inú ń ṣí nínú aṣàwákiri, àti pé àkọsílẹ̀ Python ṣì ń fi àṣìṣe proxy jáde. Kò sí ohun tí kò tọ̀nà pẹ̀lú ihò náà nínú àwòrán yẹn: olùtúmọ̀ náà ń ka àdírẹ́sì proxy láti inú àyíká tirẹ̀, ó sì ń fi ìbéèrè náà lọ síbẹ̀. Ìwé ìtọ́sọ́nà yìí ń ka àyíká tí ìlànà náà rí gan-an, ó ń lo ìyàsọ́tọ̀ tó kéré jùlọ, àti pé lẹ́yìn náà ni ó tó yẹ̀wò ìlànà ìpàdé tí ó ṣe kedere. Gbogbo ìgbésẹ̀ ń parí pẹ̀lú àṣẹ tí ìjáde rẹ̀ ń pinnu bóyá o máa tẹ̀síwájú.

Ka àyíká tí ìlànà náà rí gan-an

Ètò proxy orí tábìlì, àwọn ìjáde shell àti àwọn ìlà Environment= ti ẹ̀ka systemd jẹ́ orísun mẹ́ta tí ó yàtọ̀, Requests sì ń ka èyí tí ó gbẹ̀yìn tí ó jogún nìkan. Ṣe àyẹ̀wò ìsàlẹ̀ yìí nínú shell, kọ́ńtẹ́nà tàbí ẹ̀ka kan náà tí ń ṣe àkọsílẹ̀ tí ó kùnà, kì í ṣe nínú tẹ́mínà olùbáṣepọ̀ rẹ. Àyípadà tí a jáde nínú shell ìwọlé rẹ kò hàn sí ìlànà kọ́ńtẹ́nà, àti pé àlàfo yẹn ń ṣàlàyé ọ̀pọ̀ ìròyìn nípa proxy tí ó ń farahàn láti ibi kankan. Àwọn àṣẹ méjèèjì ń tẹ́ dátà kan náà jáde ní àwọn ìpele àlàyé tí ó yàtọ̀.

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

A ń ka bí a ṣe ń kọ ọ̀rọ̀ kọ̀ọ̀kan méjèèjì, àti àwọn àkọsílẹ̀ tí ó tún ṣe ni a ń fi sílò ní ọ̀nà tí ìlànà náà gbà wọ́n, nítorí náà HTTP_PROXY tí ó ti pé lórí lè borí iye tí o ṣẹ̀ṣẹ̀ jáde. Àwọn àyípadà àpapọ̀ CA ṣe pàtàkì níbí pẹ̀lú, nítorí wọ́n ń yí ohun tí verify ń yanjẹ́ sí padà láìfarahàn níbikíbi nínú kóòdù. Bí ìjáde bá ṣófo, àyíká kì í ṣe ìṣòro rẹ, o sì lè dáwọ́ kíkà apá yìí. Bí ó bá ṣe àkọsílẹ̀ proxy tí o kò mọ̀, wá fáìlì tàbí ẹ̀ka tí ó ń gbé e kalẹ̀ kí o tó yí ohunkóhun padà.

Bèèrè lọ́wọ́ Requests ohun tí yóò ṣe pẹ̀lú URL pàtó kan. Ìpè yìí ń fi àwọn iye proxy, verify àti cert tí a so pọ̀ fún ìbéèrè yẹn hàn láìfi pákéètì ránṣẹ́.

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

Àkọsílẹ̀ proxies tí kò ṣófo fún alápèéjì àdáni ni ìdáhùn rẹ, iye verify tí a tẹ̀ jáde sì ń sọ àpapọ̀ CA tí ìbéèrè yóò gbẹ́kẹ̀ lé. Bí méjèèjì bá dàbí ẹni tí ó tọ́, àṣìṣe náà wà níwájú nínú àkójọ, ó sì yẹ kí o fò lọ sí apá ìjẹ́rìí. Má ṣe díwọ̀n láti inú kóòdù: ìsopọ̀ ń ṣẹlẹ̀ fún ìbéèrè kọ̀ọ̀kan, ìdí nìyẹn tí ìpàdé kan lè hu ìwà ọ̀tọ̀ọ̀tọ̀ fún alápèéjì méjì.

Yọ alápèéjì àdáni kúrò kí o tó pa ohunkóhun

Nígbà tí proxy bá jẹ́ dandan fún àwọn ibi mìíràn, àtúnṣe tó há là ìyàsọ́tọ̀ fún alápèéjì yìí. Fi kún àkójọ tí ó wà tẹ́lẹ̀ dípò kí o rọ́pò rẹ̀, nítorí píparẹ́ NO_PROXY yóò ba gbogbo ibi inú mìíràn tí ó gbẹ́kẹ̀ lé e jẹ́. Àwọn àṣẹ ìsàlẹ̀ ń fi àkọsílẹ̀ náà kún, lẹ́yìn náà wọ́n ń béèrè lọ́wọ́ Requests bóyá ìforíkun náà wà lẹ́sẹ̀.

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

Ìbámu wà nípa ìparí orúkọ alápèéjì, nítorí náà .corp.example ń bo gbogbo àkójọpọ̀ náà nígbà tí api.corp.example ń bo orúkọ kan. Ìràwọ̀ òfo ń pa proxy fún gbogbo alápèéjì, kò sì fi bẹ́ẹ̀ ṣe ohun tí iṣẹ́ ìmújáde fẹ́. Bóyá a máa gbà àkọsílẹ̀ CIDR dáradára sinmi lórí àwọn ẹ̀dà Requests àti urllib3 nínú àwòrán, nítorí náà dán àkọsílẹ̀ pàtó náà wò dípò kí o rò pé ó ń ṣiṣẹ́. Ṣàyẹ̀wò àbájáde should_bypass_proxies fún URL gidi, kì í ṣe fún orúkọ alápèéjì tí o tẹ̀ láti inú ìrántí.

Pa àwọn ìpele méjèèjì mọ́ ní ọ̀tọ̀ọ̀tọ̀ nínú orí rẹ. Yíyẹ̀ sílẹ̀ proxy HTTP kì í yẹ̀ sílẹ̀ VPN, nítorí ìpinnu proxy ń ṣẹlẹ̀ nínú ilé ìkàwé, ìpinnu ihò sì ń ṣẹlẹ̀ nínú tábìlì ọ̀nà kẹ́nẹ́lì.

Pa trust_env mọ́ kìkì gẹ́gẹ́ bí ìlànà ìpàdé tí a mọ̀ọ́mọ̀ dá

Bí gbogbo iṣẹ́ náà bá gbọ́dọ̀ fojú fo ìṣètò àyíká, kọ́ ìpàdé náà ní kedere, kí o sì kọ ìpinnu náà sínú kóòdù. Ìlànà ni, kì í ṣe ọ̀nà àbáyọ, ó sì yẹ kí ó wà nínú diff tí olùgbéwò lè rí. Àpẹẹrẹ ìsàlẹ̀ ń pa àkókò ìdúró, ipa CA kedere àti àyẹ̀wò ipò mọ́.

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

Pípa trust_env ṣíṣí ń yí ìwà mẹ́ta padà lẹ́ẹ̀kan, ọ̀kan nínú wọn nìkan ló ní í ṣe pẹ̀lú proxy. Requests dáwọ́ kíkà àwọn ẹ̀rí .netrc, àwọn àyípadà REQUESTS_CA_BUNDLE àti CURL_CA_BUNDLE sì dáwọ́ nípa lórí verify, tí ó wá ń padà sí ibi ìpamọ́ ẹ̀rí tí ó wà pẹ̀lú. Bí àjọ rẹ bá parí TLS pẹ̀lú CA tirẹ̀, ìpadàsẹ́ yẹn ń mú àṣìṣe ìjẹ́rìí jáde tí ó dàbí ẹni tí kò ní í ṣe pẹ̀lú ìyípadà tí o ṣẹ̀ṣẹ̀ ṣe. Fífi verify kọjá ní kedere ni ó ń pa àwọn ìpa méjèèjì mọ́ ní ọ̀tọ̀ọ̀tọ̀.

Ohun tí kò yẹ kí o ṣe ni ṣíṣètò verify=False láti pa àṣìṣe tí ó jáde lẹ́nu mọ́. Ìyẹn ń fi ìṣètò proxy tí kò tọ́ pààrọ̀ fún ìsopọ̀ tí a kò jẹ́rìí, ó sì ń fi ìṣòro ẹ̀rí tí ìyàsọ́tọ̀ yẹ kí ó tú jáde pamọ́.

Jẹ́rìí ìpele tí ó kùnà kí o sì pa ọ̀nà ìpadàsẹ́ mọ́

Àwọn ìkùnà mẹ́ta dàbí ara wọn nínú àkọsílẹ̀, wọn kò sì ní ohun kan tí wọ́n jọ ní: Proxy tí kò lè dé ibi yóò ju ProxyError jáde tàbí yóò dá 502 padà, ìṣòro ìgbẹ́kẹ̀lé yóò ju SSLError jáde, àti ìkọ̀sílẹ̀ ohun èlò yóò dá 401 tàbí 403 padà. Tún ìbéèrè náà ṣe níta Requests láti rí èyí tí o ní. Àwọn àṣẹ ìsàlẹ̀ yóò yọ proxy kúrò, yóò dán ìdìpọ̀ ẹ̀rí wò, lẹ́yìn náà yóò tún ìpè náà ṣe nípasẹ̀ ilé ìkàwé.

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

Bí ìpè curl bá ṣàṣeyọrí tí ìpè Python sì kùnà, àyíká ṣì ni ìyàtọ̀ náà. Bí méjèèjì bá kùnà ní ìpele TLS, proxy kò tíì jẹ́ ìṣòro rí, ìdìpọ̀ ẹ̀rí sì ni ìṣòro. Bí méjèèjì bá dá 401 padà, ìbéèrè ti dé ohun èlò, iṣẹ́ tó kù sì ni ìjẹ́rìí. Kíkọ èyí tí o ṣàyẹ̀wò nínú mẹ́ta náà yóò gba wákàtí kan lọ́wọ́ ẹni tí ó kàn.

Ìpadàsẹ́ jẹ́ ìlà kan ní ẹ̀gbẹ́ méjèèjì: yọ ìyàsọ́tọ̀ kúrò, tàbí yí trust_env padà. Pa iye NO_PROXY tẹ́lẹ̀ mọ́ kí o tó fi kún un, kí o sì fẹ́ràn àkọsílẹ̀ àgbáyé tàbí àkọsílẹ̀ Environment= ní ìpele ẹ̀ka ju ìjáde tí ó ń gbé nínú ìtàn tẹ́mínà rẹ nìkan. Àwọn ìyípadà méjèèjì hàn nínú àyíká ìlànà, nítorí náà àtúnbẹ̀rẹ̀ sábà máa ń mú ọ padà sí ìwà àtijọ́.

Parí nípa fífi ohun mẹ́rin múlẹ̀: àwọn ìṣètò tí a so pọ̀ fún URL àdáni kò fi proxy kankan hàn, ẹ̀rí ń jẹ́rìí sí CA tí a pinnu, ìbéèrè ń dá ipò tí o retí padà, àti pé a ti commit ìyípadà náà sí ibi tí a lè tún ṣe. Àkọsílẹ̀ aláwọ̀ ewé pẹ̀lú àyíká tí a kò ṣàlàyé jẹ́ àtúnṣe tí yóò tún bàjẹ́ lórí ẹ̀rọ tí ó kàn. Àwọn àṣẹ inú ìwé yìí ni ó yẹ kí a lẹ̀ mọ́ tíkẹ́ẹ̀tì.

Àwọn àpilẹ̀kọ tó jọra