Python urllib៖ បិទប្រូកស៊ីសម្រាប់ opener មួយ
បង្កើត opener របស់ urllib ដែលភ្ជាប់ផ្ទាល់ដោយប្រើ ProxyHandler({}) ដោយមិនប្តូរកម្មវិធីភ្ញៀវផ្សេង ឬបរិស្ថាននៃដំណើរការ។
ផ្តល់ការផ្គូផ្គងទទេទៅ ProxyHandler នៅពេល opener មួយរបស់ urllib ត្រូវភ្ជាប់ផ្ទាល់៖
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
វចនានុក្រមទទេមិនផ្តល់ផ្លូវប្រូកស៊ីណាមួយទេ។ ការមិនផ្តល់ការផ្គូផ្គងវិញអនុញ្ញាតឱ្យ handler រកប្រូកស៊ីពីបរិស្ថាន និងការកំណត់របស់វេទិកា។ វិធីបង្កើតទាំងពីរនេះបង្ហាញគោលការណ៍ផ្សេងគ្នា។
ឧទាហរណ៍ប្រើបណ្ណាល័យស្តង់ដាររបស់ Python និងរក្សាការផ្ទៀងផ្ទាត់ HTTPS ធម្មតា។ ប្លុក with បិទចម្លើយតប រួមទាំងពេលចាកចេញពីប្លុកដោយសារករណីលើកលែង។
សំណើផ្ទាល់ និងតាមប្រូកស៊ីក្នុងកម្មវិធីតែមួយ
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 ជាការកំណត់សម្រាប់ប្រតិបត្តិការមួយ មិនមែនជាកាលកំណត់ពេលវេលាពិតសម្រាប់ការផ្ទេរទាំងមូលនីមួយៗទេ។ អានតែទិន្នន័យចាំបាច់ ហើយប្រើកាលកំណត់កម្រិតខ្ពស់ជាង បើការងារមានពេលសរុបកំណត់តឹងរ៉ឹង។
វត្ថុ opener ទាំងនេះមិនប្តូរកម្មវិធីភ្ញៀវរបស់បណ្ណាល័យផ្សេង ដំណើរការដែលមានស្រាប់ ឬការកំណត់ប្រូកស៊ីរបស់កម្មវិធីរុករកទេ។