CPython 3.14 imaplib кроз SOCKS са провереним TLS-ом
Прилагодите CPython 3.14 IMAP SSL везу кроз 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 аутентификација.