ជៀសវាងការផ្លាស់ប្តូរ urllib opener ជាសកលនៅក្នុងឧបករណ៍ពិនិត្យ proxy
រក្សាការពិនិត្យ proxy ដោយ urllib ឱ្យនៅក្នុង opener របស់វាផ្ទាល់ ជំនួសឱ្យការជំនួសការបញ្ជូនផ្លូវ និងពេលវេលាកំណត់លំនាំដើមទាំងដំណើរការ។
from urllib.request import ProxyHandler, build_opener
def make_proxy_opener(proxy_uri):
return build_opener(ProxyHandler({
"http": proxy_uri,
"https": proxy_uri,
}))
opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.ហៅវិធីសាស្ត្រ open ផ្ទាល់របស់ opener នេះ នៅពេលផ្លូវជាកម្មសិទ្ធិរបស់ការពិនិត្យ។ ចំណុចបញ្ចប់ HTTP នៅក្នុងឧទាហរណ៍អាចមកពីសេវារបស់អ្នក ឬពីបញ្ជី proxy HTTP សម្រាប់ការពិនិត្យសាធារណៈ។ បំណែកនេះបង្ហាញពីភាពជាម្ចាស់។ វាមិនកំណត់គោលនយោបាយផ្ទៀងផ្ទាត់ ឬសុខភាពពេញលេញទេ។ រក្សា handler ជាក់លាក់គណនីណាមួយឱ្យភ្ជាប់នឹងអតិថិជនដែលបានបម្រុង។
urllib.request.install_opener() ផ្លាស់ប្តូរលំនាំដើមទាំងដំណើរការ ដែលការហៅ urlopen() នៅកម្រិតម៉ូឌុលក្រោយៗប្រើ។ ដូច្នេះ ឧបករណ៍ពិនិត្យដែលវិលជុំលើ proxy អាចបន្សល់សំណើមិនពាក់ព័ន្ធឱ្យប្រើចំណុចបញ្ចប់ចុងក្រោយរបស់វា។ ការដំឡើងបណ្តោះអាសន្ន និងការស្តារឡើងវិញពេលសម្អាត នៅតែអនុញ្ញាតឱ្យសំណើស្របគ្នាដំណើរការក្នុងអំឡុងពេលផ្លាស់ប្តូររួម។
socket.setdefaulttimeout() ក៏ផ្លាស់ប្តូរលំនាំដើមសម្រាប់ socket ដែលបង្កើតនៅពេលក្រោយដូចគ្នា។ ប្រើពេលវេលាកំណត់នៅកម្រិតប្រតិបត្តិការ នៅពេលមានតែការពិនិត្យទេដែលគួរទទួលវា។
បិទការឆ្លើយតបរបស់ការពិនិត្យ ហើយរក្សាលទ្ធផលឱ្យជាក់លាក់៖ ការឆ្លើយតបកំហុស HTTP មិនមែនជាអ្នកស្តាប់ proxy ស្លាប់ដោយស្វ័យប្រវត្តិទេ។ ប្រសិនបើការពិនិត្យ urllib សមកាលកម្មត្រូវបានប្រើក្នុងសេវាអសមកាល សូមផ្លាស់ការងារដែលរារាំងទៅ worker សមស្រប។ ការសម្រេចចិត្តអនុវត្តនោះមិនធ្វើឱ្យការផ្លាស់ប្តូរ opener ជាសកលក្លាយជាដាច់ដោយឡែកទេ។
ការពិនិត្យគួរតែត្រឡប់ការសង្កេតរបស់វា ដោយមិនបន្សល់គោលនយោបាយបណ្តាញផ្សេងទៀតនៅពីក្រោយ។ វត្ថុអតិថិជនផ្ទាល់របស់វា និងប្រតិបត្តិការមានដែនកំណត់ ធ្វើឱ្យព្រំដែននោះច្បាស់លាស់។