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־אויטענטיפֿיקאַציע.