පෞද්ගලික API එකක Requests ProxyError? මුලින්ම පරිසරය පරීක්ෂා කරන්න
Requests පරිසරයෙන් ප්රොක්සි, auth සහ CA සැකසුම් ඒකාබද්ධ කරයි. ක්රියාවලිය දකින දේ කියවන්න, පෞද්ගලික සත්කාරකය බැහැර කරන්න, සහ TLS සත්යාපනය සක්රීයව තබන්න.
VPN ක්රියාත්මකයි, අභ්යන්තර උපකරණ පුවරුව බ්රවුසරයේ විවෘත වේ, නමුත් Python ස්ක්රිප්ටය තවමත් ප්රොක්සි දෝෂයක් නිකුත් කරයි. එම රූපයේ උමං මාර්ගයේ කිසිදු වරදක් නැත: අන්තර්ප්රකාශකය තමන්ගේ පරිසරයෙන් ප්රොක්සි ලිපිනයක් කියවා ඉල්ලීම එහි යවයි. මෙම මාර්ගෝපදේශය ක්රියාවලිය ඇත්තටම දකින පරිසරය කියවයි, පටුම බැහැර කිරීම යොදයි, ඉන් පසුව පමණක් පැහැදිලි සැසි ප්රතිපත්තියක් සලකා බලයි. සෑම පියවරක්ම ඔබ දිගටම යනවාද යන්න තීරණය කරන නිමැවුමක් සහිත විධානයකින් අවසන් වේ.
ක්රියාවලිය ඇත්තටම දකින පරිසරය කියවන්න
ඩෙස්ක්ටොප් ප්රොක්සි සැකසුම්, shell අපනයන සහ systemd ඒකකයක Environment= පේළි තුනක් වෙනස් මූලාශ්ර වන අතර, Requests කියවන්නේ උරුම වන අවසාන එක පමණි. අසාර්ථක ස්ක්රිප්ටය ධාවනය කරන එම shell, කන්ටේනරය හෝ ඒකකය තුළම පහත රෝග විනිශ්චය ධාවනය කරන්න, ඔබේ අන්තර්ක්රියාකාරී පර්යන්තයේ නොව. ඔබේ පිවිසුම් shell තුළ අපනයනය කළ විචල්යයක් කන්ටේනර ක්රියාවලියකට නොපෙනේ, එම පරතරයම කොහේ නැති තැනකින් පෙනෙන ප්රොක්සියක් ගැන බොහෝ වාර්තා පැහැදිලි කරයි. විධාන දෙකම එකම දත්ත විවිධ විස්තර මට්ටමකින් මුද්රණය කරයි.
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()]"
සෑම විචල්යයකම අක්ෂර වින්යාස දෙකම කියවනු ලබන අතර, අනුපිටපත් ඇතුළත් කිරීම් ක්රියාවලියට ලැබුණු අනුපිළිවෙලට යොදනු ලැබේ, එබැවින් පැරණි HTTP_PROXY ඔබ දැන් අපනයනය කළ අගය ඉක්මවා යා හැක. CA-කදම්භ විචල්ය ද මෙහි වැදගත් වේ, මන්ද ඒවා කේතයේ කොතැනකවත් නොපෙනී verify විසඳෙන දේ වෙනස් කරයි. නිමැවුම හිස් නම් පරිසරය ඔබේ ගැටලුව නොවේ, මෙම කොටස කියවීම නවත්වා ගත හැක. ඔබ නොහඳුනන ප්රොක්සියක් එය ලැයිස්තුගත කරන්නේ නම්, යමක් වෙනස් කිරීමට පෙර එය සකසන ගොනුව හෝ ඒකකය සොයා ගන්න.
නිශ්චිත URL එකක් සමඟ Requests කුමක් කරයි දැයි අසන්න. මෙම ඇමතුම පැකට්ටුවක් නොයවා එම ඉල්ලීම සඳහා ඒකාබද්ධ ප්රොක්සි, verify සහ cert අගයන් පෙන්වයි.
python3 -c "import requests;s=requests.Session();print(s.merge_environment_settings('https://api.corp.example/status',{},None,None,None))"
පෞද්ගලික සත්කාරකය සඳහා හිස් නොවන proxies ඇතුළත් කිරීම ඔබේ පිළිතුරයි, සහ මුද්රිත verify අගය ඉල්ලීම විශ්වාස කරන CA-කදම්භය පවසයි. දෙකම නිවැරදි ලෙස පෙනේ නම්, අසාර්ථකත්වය තොගයේ පසුව ඇති අතර ඔබ සත්යාපන කොටසට යා යුතුය. කේතයෙන් අනුමාන නොකරන්න: ඒකාබද්ධ කිරීම සෑම ඉල්ලීමකටම සිදු වේ, එබැවින් එක් සැසියක් සත්කාරක දෙකක් සඳහා වෙනස් ලෙස හැසිරිය හැක.
යමක් අබල කිරීමට පෙර පෞද්ගලික සත්කාරකය බැහැර කරන්න
වෙනත් ගමනාන්ත සඳහා ප්රොක්සිය ඇත්තටම අවශ්ය වූ විට, පටු නිවැරදි කිරීම මෙම සත්කාරකය සඳහා බැහැර කිරීමකි. දැනට ඇති ලැයිස්තුවට එකතු කරන්න, එය ප්රතිස්ථාපනය නොකරන්න, මන්ද NO_PROXY මකා දැමීම එය මත රඳා පැවති අනෙක් සෑම අභ්යන්තර ගමනාන්තයක්ම බිඳ දමයි. පහත විධාන ඇතුළත් කිරීම එකතු කර පසුව මඟ හැරීම අදාළ වේදැයි Requestsගෙන් අසයි.
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))"
ගැළපීම සත්කාරක උපසර්ගය අනුව සිදු වේ, එබැවින් .corp.example මුළු වසම ආවරණය කරන අතර api.corp.example එක් නමක් ආවරණය කරයි. හිස් තරු ලකුණ සෑම සත්කාරකයකටම ප්රොක්සිය අබල කරන අතර නිෂ්පාදන කාර්යයක් එය කිසි විටෙකත් පාහේ නොඅවශ්ය වේ. CIDR ඇතුළත් කිරීමක් ගරු කරන්නේද යන්න රූපයේ ඇති Requests සහ urllib3 අනුවාද මත රඳා පවතී, එබැවින් ක්රියා කරයි යැයි උපකල්පනය නොකර නිශ්චිත ඇතුළත් කිරීම අත්හදා බලන්න. should_bypass_proxies හි ප්රතිඵලය සැබෑ URL එක සඳහා පරීක්ෂා කරන්න, මතකයෙන් ටයිප් කළ සත්කාරක නාමය සඳහා නොව.
ස්තර දෙක මනසේ වෙන් කර තබා ගන්න. HTTP ප්රොක්සිය මඟ හැරීම VPN මඟ හරියන්නේ නැත, මන්ද ප්රොක්සි තීරණය පුස්තකාලයේද උමං තීරණය කර්නලයේ මාර්ගගත කිරීමේ වගුවේද සිදු වේ.
trust_env අබල කරන්නේ හිතාමතා ගත් සැසි ප්රතිපත්තියක් ලෙස පමණි
සම්පූර්ණ කාර්යයට අවට වින්යාසය නොසලකා හැරිය යුතු නම්, සැසිය පැහැදිලිව ගොඩනඟා තීරණය කේතයේ සටහන් කරන්න. එය ප්රතිපත්තියක් මිස විසඳුමක් නොවේ, සහ සමාලෝචකයෙකුට දැකිය හැකි diff එකකට අයත් වේ. පහත උදාහරණය කාල සීමාවක්, පැහැදිලි CA මාර්ගයක් සහ තත්ත්ව පරීක්ෂාවක් රඳවා ගනී.
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()
trust_env අබල කිරීම එකවර හැසිරීම් තුනක් වෙනස් කරයි, ඉන් එකක් පමණක් ප්රොක්සි ගැනය. Requests .netrc අක්තපත්ර කියවීම නවත්වයි, සහ REQUESTS_CA_BUNDLE සහ CURL_CA_BUNDLE විචල්ය verify ට බලපෑම කිරීම නවත්වයි, එය පසුව ඇතුළත් සහතික ගබඩාවට නැවත වැටේ. ඔබේ සංවිධානය තමන්ගේම CA සමඟ TLS අවසන් කරන්නේ නම්, එම පසුබැස්ම ඔබ දැන් කළ වෙනසට සම්බන්ධ නැති බව පෙනෙන සත්යාපන දෝෂයක් ඇති කරයි. verify පැහැදිලිව යැවීමම බලපෑම් දෙක වෙන් කර තබයි.
ඔබ නොකළ යුත්තේ ඇති වූ දෝෂය නිහඬ කිරීමට verify=False සැකසීමයි. එය ප්රොක්සියේ වැරදි වින්යාසයක් සත්යාපනය නොකළ සම්බන්ධතාවයක් සමඟ මාරු කරයි, සහ බැහැර කිරීම මතු කළ යුතුව තිබූ සහතික ගැටලුව සඟවයි.
අසාර්ථක ස්තරය සත්යාපනය කර පසුගමන් කිරීමේ හැකියාව තබා ගන්න
අසාර්ථකතා තුනක් ලොගයේ එකම ලෙස පෙනෙන අතර ඒවාට පොදු කිසිවක් නැත: ගමනාන්තයට ළඟා නොවන ප්රොක්සිය ProxyError විසි කරයි හෝ 502 ලෙස ආපසු දෙයි, විශ්වාස ගැටලුවක් SSLError විසි කරයි, සහ යෙදුම් ප්රතික්ෂේපයක් 401 හෝ 403 ලෙස ආපසු දෙයි. ඔබට ඇත්තේ කුමක්දැයි දැකීමට ඉල්ලීම Requestsෙන් පිටත නැවත නිපදවන්න. පහත විධාන ප්රොක්සිය ඉවත් කර, සහතික දාමය පරීක්ෂා කර, පසුව පුස්තකාලය හරහා ඇමතුම නැවත කරයි.
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)"
curl ඇමතුම සාර්ථක වී Python ඇමතුම අසාර්ථක වුවත් වෙනස තවමත් පරිසරයයි. දෙකම TLS අදියරේදී අසාර්ථක වුවත්, ප්රොක්සිය කිසි විටෙකත් ගැටලුව නොවීය, ගැටලුව සහතික දාමයයි. දෙකම 401 ලෙස ආපසු දුන්නොත්, ඉල්ලීම යෙදුමට ළඟා වී ඇති අතර ඉතිරි කාර්යය සත්යාපනයයි. තුනෙන් කුමක් නිරීක්ෂණය කළාදැයි සටහන් කිරීම ඊළඟ පුද්ගලයාට පැයක් ඉතිරි කරයි.
පසුගමන් කිරීම ඕනෑම දිශාවකට එක් පේළියකි: බැහැර කිරීම ඉවත් කරන්න, නැතහොත් trust_env ආපසු හරවන්න. එකතු කිරීමට පෙර පෙර NO_PROXY අගය සුරකින්න, සහ ඔබේ පර්යන්ත ඉතිහාසයේ පමණක් ජීවත් වන අපනයනයකට වඩා ආවරණ ස්ක්රිප්ටයක් හෝ ඒකක මට්ටමේ Environment= ඇතුළත් කිරීමක් තෝරන්න. වෙනස්කම් දෙකම ක්රියාවලි පරිසරයේ පෙනෙන බැවින්, නැවත ආරම්භ කිරීම සාමාන්යයෙන් ඔබව පැරණි හැසිරීමට ගෙන එයි.
කරුණු හතරක් තහවුරු කර අවසන් කරන්න: පෞද්ගලික URL එක සඳහා ඒකාබද්ධ සැකසුම් කිසිදු ප්රොක්සියක් නොපෙන්වයි, සහතිකය අභිප්රේත CA එකට එරෙහිව වලංගු වේ, ඉල්ලීම ඔබ බලාපොරොත්තු වන තත්ත්වය ආපසු දෙයි, සහ වෙනස නැවත නිපදවිය හැකි තැනක commit කර ඇත. පැහැදිලි නොකළ පරිසරයක් සහිත හරිත ස්ක්රිප්ටයක් ඊළඟ යන්ත්රයේ නැවත බිඳෙන අලුත්වැඩියාවකි. මෙම මාර්ගෝපදේශයේ විධාන ටිකට් පත්රයට අලවන්නේ ඒවාය.