Python: Wieso bekomme ich mit der requests-Bibliothek nicht die IPs der Proxies?
Hallo!
Ich habe folgenden Code:
import requests, json, random
with open("config/proxies.txt", "r") as generator:
Proxies = []
Proxies += [proxy.strip() for proxy in generator.readlines()]
while True:
Proxy_Payload = {
"http": 'http://%s' % random.choice(Proxies)
}
s = requests.Session()
s.proxies = Proxy_Payload
r = s.get("https://api.ipify.org/?format=json", proxies=Proxy_Payload)
print(r.text)
https://api.ipify.org/?format=json zeigt die IP an, mit der ich die Webseite anfrage.
Aber nun habe ich das Problem, dass ich immer meine eigene IP zurückbekomme und nicht die IP von den Proxies, wie es eigentlich sein sollte.
Die Proxies sind von https://proxyscrape.com/, also kostenlos. Aber ich habe sie mit einem Proxy-Checker geprüft.
Wie kann ich das beheben?
2 Antworten
Nur nebenbei bemerkt:
with open("config/proxies.txt", "r") as generator:
Proxies = []
Proxies += [proxy.strip() for proxy in generator.readlines()]
Du mußt nicht erst die Liste anlegen, um die Liste, die die Comprehension erzeugt nochmalig anzufügen:
with open("config/proxies.txt", "r") as generator:
Proxies = [proxy.strip() for proxy in generator.readlines()]
Reicht ansich völlig aus.
Ansich sieht das soweit okay aus, ich weiß allerdings nciht, wie requests sich genau verhält, wenn etwas mit dem proxy dictionary nicht stimmt, oder ein Proxy nicht erreicht wird - habe diesbezüglich auf die Schnelle nichts in der Doku gefunden.
Das setzen des Proxies auf Sessioneben kannst Du Dir schenken, da verweise ich auf die doku, das verhält sich mitunter anders als gewollt.
Und die Textdatei enthält die Proxies ohne Schema?
Das Problem wird warscheinlich daran liegen, dass du im Proxy Dictionary das Protokoll HTTP angibst. Im Request nutzt du allerdings HTTPS als Protokoll. Daher hat die requests Library wahrscheinlich die Proxy Angabe ignoriert.