En rå Python-socket forhandler ikke om proxy bare fordi http_proxy finnes. For en applikasjon som snakker sin egen TCP-protokoll, bruk en kobling som forstår tjenesten ved proxy-endepunktet.

Når PySocks allerede er tilgjengelig, opprett tilkoblingen eksplisitt:

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.

Erstatt dokumentasjonsadressen og destinasjonsporten. For en tillatt offentlig destinasjon, velg en kandidat fra SOCKS5-proxylisten bare etter å ha kontrollert at den tillater applikasjonens målport. Kontroller den installerte pakken, støttede metoder og endepunktkrav mot PySocks-grensesnittet.

Resten av applikasjonen utveksler protokollen sin over denne etablerte tilkoblingen. Hvis den protokollen bruker TLS, start den etter proxy-forhandlingen og verifiser det virkelige destinasjonsvertsnavnet. Proxy-autentisering etablerer ruten; den gir ikke destinasjonsinnloggingen eller kryptering.

En SOCKS-lytter trenger SOCKS-forhandling. En HTTP-tjeneste trenger en CONNECT-kapabel kobling for en vilkårlig TCP-destinasjon og kan avvise porten sin. Velg koblingen fra tjenesten som faktisk tilbys, i stedet for å endre en adresse mens du lar feil håndtrykk stå.

Hold erstatningen lokal. Å tildele en klasse til socket.socket kan påvirke urelaterte importer og biblioteker. Hvis et annet bibliotek eier socket-opprettelsen, bruk den dokumenterte tilkoblingsfabrikken eller proxy-alternativet; en ordbok den aldri leser kan ikke endre den tilkoblingen.

Relaterte artikler