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?
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?
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
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
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)
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:
socks.py
Datei aus dem Repo und legen Sie eine Kopie in Ihrem Stammordner ab;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.
pip install PySocks
pip install pysocks5
export https_proxy=socks5://<hostname or ip>:<port>
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)'
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
.