En SOCKS-medveten anslutning för Pythons TCP-socketar
Välj en socketanslutning som förstår proxy och håll dess omfattning åtskild från Pythons processövergripande socketimplementering.
En rå Python-socket förhandlar inte fram en proxy bara för att http_proxy finns. För ett program som talar ett eget TCP-protokoll, använd en anslutning som förstår tjänsten vid proxyändpunkten.
Om PySocks redan finns tillgängligt skapar du anslutningen uttryckligen:
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.
Byt ut dokumentationsadressen och målporten. För ett tillåtet offentligt mål väljer du en kandidat från listan över SOCKS5-proxyer först efter att ha kontrollerat att den tillåter programmets målport. Kontrollera det installerade paketet, metoder som stöds och slutpunktens krav mot PySocks-gränssnittet.
Resten av programmet utbyter sitt protokoll över denna upprättade anslutning. Om protokollet använder TLS startar du det efter proxyförhandlingen och verifierar målvärdens verkliga namn. Proxyautentisering upprättar rutten; den ger inte inloggningen till målet eller kryptering.
En SOCKS-lyssnare behöver SOCKS-förhandling. En HTTP-tjänst behöver en CONNECT-kapabel anslutning för ett godtyckligt TCP-mål och kan neka sin port. Välj anslutning utifrån den tjänst som faktiskt erbjuds i stället för att ändra en adress och lämna kvar fel handskakning.
Håll utbytet lokalt. Att tilldela en klass till socket.socket kan påverka orelaterade importer och bibliotek. Om ett annat bibliotek äger socket-skapandet använder du dess dokumenterade anslutningsfabrik eller proxyalternativ; en ordlista som det aldrig läser kan inte ändra den anslutningen.