CPython 3.14 imaplib តាមរយៈ SOCKS ជាមួយ TLS ដែលបានផ្ទៀងផ្ទាត់
កែសម្រួលការតភ្ជាប់ IMAP SSL របស់ CPython 3.14 តាមរយៈ SOCKS ដោយមិនជំនួសសុខសនៅទូទាំងពិភពលោក ឬបាត់បង់អត្តសញ្ញាណ TLS របស់ម៉ាស៊ីនមេសំបុត្រ។
ការតភ្ជាប់ IMAP SSL អាចធ្វើដំណើរតាម SOCKS ខណៈរក្សាម៉ាស៊ីនមេសំបុត្រជាដៃគូ TLS របស់វា។ ចំណុចសមាហរណកម្មដែលមានប្រយោជន៍គឺកន្លែងដែលអតិថិជនបង្កើតការដឹកជញ្ជូនរបស់ខ្លួន មុនពេលការស្វាគមន៍ IMAP ធម្មតា និងការគ្រប់គ្រងសមត្ថភាពចាប់ផ្តើម។
សម្រាប់ CPython 3.14 ខាងក្រោមនេះបង្ហាញអាដាប់ទ័រតូចមួយដែលប្រើ PySocks។ វាជំនួសហុកការដឹកជញ្ជូនឯកជន ដូច្នេះរក្សាវាភ្ជាប់នឹងកំណែ imaplib ដែលកំពុងថែទាំ៖
import imaplib
import ssl
import socks
class SocksIMAP4SSL(imaplib.IMAP4_SSL):
def _create_socket(self, timeout):
stream = socks.create_connection(
(self.host, self.port),
timeout=timeout,
proxy_type=socks.SOCKS5,
proxy_addr="proxy.example",
proxy_port=1080,
proxy_rdns=True,
)
try:
return self.ssl_context.wrap_socket(
stream, server_hostname=self.host)
except Exception:
stream.close()
raise
context = ssl.create_default_context()
with SocksIMAP4SSL("imap.example", ssl_context=context,
timeout=15) as mailbox:
mailbox.noop()ឈ្មោះ និងច្រកគឺជាកន្លែងជំនួសសម្រាប់ប្រូកស៊ី និងសេវា IMAP ដែលមានរួចហើយ។ សម្រាប់គោលដៅ IMAP សាធារណៈដែលត្រូវបានអនុញ្ញាតឱ្យប្រើប្រូកស៊ីសាធារណៈ បញ្ជីប្រូកស៊ី SOCKS5 ផ្តល់បេក្ខជន។ នីមួយៗត្រូវតែអនុញ្ញាតឱ្យមានម៉ាស៊ីនសំបុត្រ និងច្រកដែលត្រូវការ។ ភាពអាស្រ័យ PySocks ផ្តល់ការចរចា SOCKS; imaplib នៅតែចាប់ផ្តើមសម័យសំបុត្រ។ មិនមានការជំនួស socket.socket ជាសកលណាមួយពាក់ព័ន្ធទេ។
រក្សាអត្តសញ្ញាណរបស់ម៉ាស៊ីនមេសំបុត្រ
ឈ្មោះម៉ាស៊ីន TLS នៅតែជា imap.example។ វាមិនមែនជាឈ្មោះម៉ាស៊ីន SOCKS ទេ។ ការបញ្ជូន ssl.create_default_context() បើកការត្រួតពិនិត្យវិញ្ញាបនបត្រ និងឈ្មោះម៉ាស៊ីនធម្មតាដោយចេតនា; សុខដែលបានអ៊ិនគ្រីបតែម្នាក់ឯងមិនគ្រប់គ្រាន់ដើម្បីបង្កើតការត្រួតពិនិត្យទាំងនោះទេ។
proxy_rdns=True ស្នើឱ្យ ផ្លូវ SOCKS គ្រប់គ្រងឈ្មោះម៉ាស៊ីនគោលដៅ។ ប្រសិនបើប្រូកស៊ីត្រូវការគណនី អាគុយម៉ង់ព័ត៌មានសម្ងាត់ដែលគាំទ្ររបស់វាជាកម្មសិទ្ធិរបស់ការកំណត់រចនាសម្ព័ន្ធដឹកជញ្ជូននោះ។ ពួកវាមិនចូលក្នុងប្រអប់សំបុត្រទេ។
ទុកការចាប់ផ្តើមសម័យទៅ imaplib
អាដាប់ទ័រត្រឡប់ស្ទ្រីម TLS ទៅសំណង់ធម្មតា។ ការអនុវត្តឡើងវិញ open() ពីឧទាហរណ៍ចាស់អាចខកខានប៉ារ៉ាម៉ែត្រពេលវេលា ការទុកបណ្តោះអាសន្ន និងការរំពឹងចាប់ផ្តើមផ្សេងទៀត។ នៅក្នុង CPython 3.14 សូម្បីតែការចូលប្រើ file ចាស់ក៏ជាលក្ខណៈសមាសភាព មិនមែនជាវាលដែលអាចសង់ឡើងវិញដោយសេរីទេ។
នៅពេលដំឡើងបណ្ណាល័យឡើងវិញ សូមពិនិត្យហុកឯកជននេះប្រឆាំងនឹងប្រភពដែលត្រូវគ្នា។ ប្រសិនបើការថែទាំថ្នាក់រងមិនសមស្រប សូមជ្រើសរើសអតិថិជនសំបុត្រដែលមានចំណុចប្រទាក់ដឹកជញ្ជូនប្រូកស៊ីដែលបានឯកសារ។ ការរៀបចំណាមួយគួររក្សាការបំបែកដូចគ្នា៖ ការតភ្ជាប់ប្រូកស៊ី ការផ្ទៀងផ្ទាត់ TLS នៃគោលដៅ បន្ទាប់មកការផ្ទៀងផ្ទាត់ IMAP។