Wie man Python-Anfragen über den SOCKS-Proxy zum Laufen bringt

Lesezeit: 6 Minuten

Ich benutze die große Anfragen Bibliothek in meinem Python-Skript:

import requests
r = requests.get("some-site.com")
print r.text

Ich möchte den Socks-Proxy verwenden. Aber Requests unterstützt jetzt nur den HTTP-Proxy.

Wie kann ich das machen?

Wie man Python Anfragen uber den SOCKS Proxy zum Laufen bringt
dvska

Der moderne Weg:

pip install -U requests[socks]

dann

import requests

resp = requests.get('http://go.to', 
                    proxies=dict(http='socks5://user:pass@host:port',
                                 https="socks5://user:pass@host:port"))

  • Beachten Sie, dass bei Verwendung eines SOCKS-Proxy-Requesocks HTTP-Anforderungen mit der vollständigen URL (z. B. “GET beispiel.com HTTP/1.1″ statt “GET / HTTP/1.1”) und dieses Verhalten kann zu Problemen führen. Leider scheint es derzeit keine bessere Lösung zu geben.

    – a3nm

    7. Juni 14 um 19:55 Uhr

  • Ich benutze zsh und ich muss tun bash -c "pip install -U requests[socks]" stattdessen wird sich zsh sonst beschweren zsh: no matches found: requests[socks].

    – Bruce Sonne

    12. Januar 17 um 02:07 Uhr

  • Unter Windows benötigen Sie außerdem: pip install win-inet-pton

    – rstaveley

    3. Februar 17 um 11:29 Uhr


  • @Bruce Sun pip install 'requests[socks]' würde reichen

    – bakaproblem

    26. Januar 19 um 6:43 Uhr

  • Ich musste der Socken-URL ein ‘h’ hinzufügen: socks5h://localhost:8080 weil der Hostname bei mir nicht aufgelöst werden konnte. Von github.com/urllib3/urllib3/issues/1035, scheint das ‘h’ der Bibliothek mitzuteilen, dass der Server derjenige sein wird, der den Hostnamen auflöst.

    – Philippe Carphin

    13. August 2020 um 18:20 Uhr

Wie man Python Anfragen uber den SOCKS Proxy zum Laufen bringt
Jim

Ab requests Ausführung 2.10.0, veröffentlicht am 2016-04-29, requests unterstützt SOCKEN.

Es benötigt PySocks, die mit installiert werden kann pip install pysocks.

Beispielnutzung:

import requests
proxies = {'http': "socks5://myproxy:9191"}
requests.get('http://example.org', proxies=proxies)

  • pip install -U requests[socks] ist genug

    – dvska

    19. Mai ’16 um 9:23 Uhr


  • In meinem Fall pip install -U Anfragen[socks] allein geht nicht. pip install pysocks ist ein Muss.

    – Dänemark

    21. Mai ’16 um 3:40 Uhr

  • Ich möchte dies nur ändern, um ein manuelles Upgrade Ihrer Version von zu erzwingen requests zu einer Version, die unterstützt SOCKEN (> 2.10.0), Pip ausführen: pip install requests==2.18.4 (2.18.4 zum Zeitpunkt des Schreibens), aber überprüfen Sie: pypi.python.org/pypi/requests für die neueste Version (diese Seite sollte Ihnen in der oberen Kopfzeile zeigen, was die neueste stabile Version ist).

    – ntk4

    11. September 17 um 4:25 Uhr

  • Ich bin in diesem Fall mit @DenMark zusammen. Mein Arbeitslaptop ist ein Mac und Anfragen[socks] Ich habe mich einfach geweigert, es für mich zu installieren, egal was ich versucht habe … Pysocks hat alles auf magische Weise repariert.

    – Jeremy Logan

    3. Mai 19 um 4:33 Uhr

  • In meinem Fall gibt es socks Modulnamenskonflikt mit qBittorrent, ich muss entfernen/verschieben ~/.local/share/data/qBittorrent/nova3/socks.py und entferne das socks.pyc, Fehlermeldung zu lösen module 'socks' has no attribute 'create_connection' und bad magic number in 'socks': bzw.

    – 林果皞

    4. August 19 um 5:10 Uhr

Wie man Python Anfragen uber den SOCKS Proxy zum Laufen bringt
Mahmoud Hashemi

Falls jemand all diese älteren Antworten ausprobiert hat und immer noch auf Probleme stößt wie:

requests.exceptions.ConnectionError: 
   SOCKSHTTPConnectionPool(host="myhost", port=80): 
   Max retries exceeded with url: /my/path 
   (Caused by NewConnectionError('<requests.packages.urllib3.contrib.socks.SOCKSConnection object at 0x106812bd0>: 
   Failed to establish a new connection: 
   [Errno 8] nodename nor servname provided, or not known',))

Es kann daran liegen, dass standardmäßig requests ist so konfiguriert, dass DNS-Abfragen auf aufgelöst werden lokal Seite der Verbindung.

Versuchen Sie, Ihre Proxy-URL von zu ändern socks5://proxyhost:1234 zu socks5h://proxyhost:1234. Beachten Sie das Extra h (es steht für Hostnamenauflösung).

Die Standardeinstellung des PySocks-Paketmoduls ist die Remoteauflösung, und ich bin mir nicht sicher, warum Anfragen gestellt wurden ihre Integration dies obskur divergierend, aber hier sind wir.

  • Genau das war mein Problem! Danke!

    – Beta

    20. November 17 um 8:54 Uhr

  • Das war genau das Problem für mich. Es wurden keine DNS-Abfragen über den Proxy durchgeführt. Sobald ich das h hinzufügte, funktionierte alles einwandfrei.

    – James Campbell

    30. Januar 18 um 15:45 Uhr

  • Danke, die socks5h Ansatz ist Also viel sauberer als der Monkey-Patching-Workaround, von dem ich befürchtete, dass ich ihn vorher machen müsste.

    – Darien

    25. April 18 um 23:13 Uhr

  • Sehr schön. ich konnte nicht finden socks5h:// überall für die Python-Dokumentation auf Proxys. Muss an den falschen Stellen gesucht haben. Ich muss SO lieben.

    – Liger

    24. Juli 18 um 0:09 Uhr


  • @Ligemer Manchmal ist der Code der einzig richtige Ort, an dem man suchen muss. (Aber nachdem Sie sich den Code angesehen haben, aktualisieren Sie StackOverflow, und jetzt gibt es zwei richtige Orte, an denen Sie suchen müssen 🙂 )

    – Mahmoud Hashemi

    24. Juli 18 um 19:27 Uhr

Sie müssen installieren Pysocks , meine Version ist 1.0 und der Code funktioniert für mich:

import socket
import socks
import requests
ip='localhost' # change your proxy's ip
port = 0000 # change your proxy's port
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, ip, port)
socket.socket = socks.socksocket
url = u'http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=inurl%E8%A2%8B'
print(requests.get(url).text)

1642700166 458 Wie man Python Anfragen uber den SOCKS Proxy zum Laufen bringt
loretoparisi

Sobald Python requests wird mit verschmolzen SOCKS5 Pull Request wird es so einfach wie die Verwendung tun proxies Wörterbuch:

#proxy
        # SOCKS5 proxy for HTTP/HTTPS
        proxies = {
            'http' : "socks5://myproxy:9191",
            'https' : "socks5://myproxy:9191"
        }

        #headers
        headers = {

        }

        url="http://icanhazip.com/"
        res = requests.get(url, headers=headers, proxies=proxies)

Sehen SOCKS-Proxy-Unterstützung

Eine weitere Option, falls Sie nicht warten können request um bereit zu sein, wenn Sie nicht verwenden können requesocks – wie bei GoogleAppEngine aufgrund des Fehlens von pwd eingebautes Modul, zu verwenden PySocks das wurde oben erwähnt:

  1. Packe die socks.py Datei aus dem Repo und legen Sie eine Kopie in Ihrem Stammordner ab;
  2. Hinzufügen import socks und import socket

Konfigurieren und binden Sie an dieser Stelle den Socket, bevor Sie ihn verwenden urllib2 – im folgenden Beispiel:

import urllib2
import socket
import socks

socks.set_default_proxy(socks.SOCKS5, "myprivateproxy.net",port=9050)
socket.socket = socks.socksocket
res=urllib2.urlopen(url).read()

Sie können Ihr Skript einfach mit ausführen https_proxy Umgebungsvariable.

  1. Installieren Sie bei Bedarf die Sockenunterstützung.
pip install PySocks
pip install pysocks5
  1. Umgebungsvariable einrichten
export https_proxy=socks5://<hostname or ip>:<port>
  1. Führen Sie Ihr Skript aus. Dieses Beispiel stellt eine Anfrage über einen Proxy und zeigt die IP-Adresse:
echo Your real IP
python -c 'import requests;print(requests.get("http://ipinfo.io/ip").text)'

echo IP with socks-proxy
python -c 'import requests;print(requests.get("https://ipinfo.io/ip").text)'

1642700166 408 Wie man Python Anfragen uber den SOCKS Proxy zum Laufen bringt
wcc526

# SOCKS5 proxy for HTTP/HTTPS
proxiesDict = {
    'http' : "socks5://1.2.3.4:1080",
    'https' : "socks5://1.2.3.4:1080"
}

# SOCKS4 proxy for HTTP/HTTPS
proxiesDict = {
    'http' : "socks4://1.2.3.4:1080",
    'https' : "socks4://1.2.3.4:1080"
}

# HTTP proxy for HTTP/HTTPS
proxiesDict = {
    'http' : "1.2.3.4:1080",
    'https' : "1.2.3.4:1080"
}

  • Funktioniert es so in der neuesten Requests-Version? Ohne requesocks?

    – Gtx

    17. Dezember 15 um 8:11 Uhr


  • Dies ist das proxies Wörterbuch für neueste requests Pull Request, der zu diesem Zeitpunkt noch nicht gemergt wurde. @sehen – github.com/kennethreitz/requests/pull/2953

    – Loretoparisi

    5. April 16 um 10:40 Uhr

.

564720cookie-checkWie man Python-Anfragen über den SOCKS-Proxy zum Laufen bringt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy