SOCKS-арыентаваны злучальнік для TCP-сокетаў Python
Выберыце злучальнік сокета, які разумее проксі, і трымайце яго абсяг асобна ад працэснага ўвасаблення сокета ў Python.
Сыры сокет Python не дамаўляецца з проксі толькі таму, што існуе http_proxy. Для праграмы, якая гаворыць уласным пратаколам TCP, выкарыстоўвайце злучальнік, які разумее службу на канчатковым пункце проксі.
Калі PySocks ужо даступны, стварыце злучэнне яўна:
import socks
with socks.socksocket() as connection:
connection.set_proxy(socks.SOCKS5, '203.0.113.10', 1080)
connection.settimeout(10)
connection.connect(('example.com', 12345))
# Exchange the destination protocol here.
Замяніце адрас з дакументацыі і порт прызначэння. Для дазволенага публічнага прызначэння выбірайце кандыдата са спісу проксі SOCKS5 толькі пасля праверкі, што ён дазваляе мэтавы порт праграмы. Праверце ўсталяваны пакет, падтрыманыя метады і патрабаванні да канчатковага пункта супраць інтэрфейсу PySocks.
Астатняя частка праграмы абменьвае свой пратакол праз гэта ўсталяванае злучэнне. Калі гэты пратакол выкарыстоўвае TLS, запусціце яго пасля перамоваў з проксі і праверце сапраўднае імя хоста прызначэння. Аўтэнтыфікацыя проксі ўстанаўлівае маршрут; яна не дае ўваход у прызначэнне або шыфраванне.
Слухачу SOCKS патрэбныя перамовы SOCKS. Службе HTTP патрэбен злучальнік з падтрымкай CONNECT для адвольнага прызначэння TCP, і яна можа адхіліць свой порт. Выбірайце злучальнік паводле службы, якая фактычна прапануецца, а не змяняйце адрас, пакідаючы няправільнае рукапоцісканне.
Трымайце замену лакальнай. Прызначэнне класа socket.socket можа паўплываць на непавязаныя імпарты і бібліятэкі. Калі стварэннем сокета валодае іншая бібліятэка, выкарыстоўвайце яе дакументаваную фабрыку злучэнняў або параметр проксі; слоўнік, які яна ніколі не чытае, не можа змяніць тое злучэнне.