Сыры сокет 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 можа паўплываць на непавязаныя імпарты і бібліятэкі. Калі стварэннем сокета валодае іншая бібліятэка, выкарыстоўвайце яе дакументаваную фабрыку злучэнняў або параметр проксі; слоўнік, які яна ніколі не чытае, не можа змяніць тое злучэнне.

Падобныя артыкулы