Python urllib: එක් opener එකකට ප්රොක්සි අක්රිය කරන්න
වෙනත් ක්ලයන්ට් හෝ ක්රියාවලියේ පරිසරය වෙනස් නොකර ProxyHandler({}) මඟින් සෘජුව සම්බන්ධ වන urllib opener සාදන්න.
එක් urllib opener එකක් සෘජුව සම්බන්ධ විය යුතු නම් ProxyHandler වෙත හිස් mapping එකක් දෙන්න:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
හිස් dictionary එක ප්රොක්සි මාර්ග කිසිවක් සපයන්නේ නැත. mapping එක නොදීමෙන් handler එක පරිසරයෙන් සහ වේදිකා සැකසුම්වලින් ප්රොක්සි සොයා ගනී. මෙම නිර්මාණ ක්රම දෙක වෙනස් ප්රතිපත්ති දක්වයි.
උදාහරණය Python සම්මත පුස්තකාලය භාවිත කර සාමාන්ය HTTPS සත්යාපනය රඳවා ගනී. with බ්ලොක් එක ප්රතිචාරය වසයි; exception එකක් නිසා බ්ලොක් එකෙන් පිටවූ විටත් එසේය.
එකම යෙදුමේ සෘජු සහ ප්රොක්සි හරහා ඉල්ලීම්
ඇමතුම් අතර පරිසර විචල්ය වෙනස් නොකර opener දෙකකට ප්රතිපත්ති දෙක රැගෙන යා හැක:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}))
with proxied.open("https://example.com/", timeout=10) as response:
print(response.status)
loopback ලිපිනය ඔබේ HTTP ප්රොක්සියෙන් ප්රතිස්ථාපනය කරන්න, නැතිනම් ප්රොක්සි සංසන්දනය සඳහා HTTP ප්රොක්සි ලැයිස්තුවෙන් එකක් තෝරන්න. සේවාව ඉඩ දෙන්නේ නම් HTTPS ඉලක්කයට සම්බන්ධතාව CONNECT හරහා ගෙන යා හැක. සවන් දෙන්නාගේ ප්රොටෝකෝලය සහ සත්යාපන සහාය handler එකට ගැළපිය යුතුය.
පෙරනිමි opener වෙනස් නොකරන්න
මාර්ගය භාර වස්තුව හරහා direct.open හෝ proxied.open අමතන්න. install_opener විසින් urllib පහසුකම් ඇමතුම් භාවිත කරන ක්රියාවලිය පුරා පෙරනිමිය වෙනස් කරයි; එය භාවිත කරන පුස්තකාලයක් අදාළ නොවන කේතයට බලපෑ හැක. ඉහත වෙන් කළ opener සඳහා එය අවශ්ය නැත.
timeout argument එක එක් මෙහෙයුමක සැකසුමක් මිස සෑම හුවමාරුවකම සම්පූර්ණ සැබෑ කාල සීමාවක් නොවේ. අවශ්ය දත්ත පමණක් කියවා, දැඩි මුළු කාල සීමාවක් තිබේ නම් ඉහළ මට්ටමේ අවසන් කාලයක් භාවිත කරන්න.
මෙම opener වස්තු වෙනත් පුස්තකාලයක ක්ලයන්ට්, පවතින ක්රියාවලියක් හෝ බ්රවුසරයේ ප්රොක්සි සැකසුම් වෙනස් නොකරයි.