CPython 3.14 imaplib SOCKS-оор баталгаажсан TLS-тэй
CPython 3.14 IMAP SSL холболтыг сокетуудыг глобал байдлаар солихгүй, шуудангийн серверийн TLS таних тэмдгийг алдалгүйгээр SOCKS-оор дамжуулан тохируулна уу.
IMAP SSL холболт нь шуудангийн серверийг өөрийн TLS түншээр хадгалсаар SOCKS-оор дамжин өнгөрч болно. Ашигтай интеграцийн цэг нь клиент өөрийн тээврийг үүсгэдэг газар, энгийн 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 баталгаажуулалт.