Seite 1 von 1
Welche Proxy Methode ist die beste?
Verfasst: Mittwoch 26. Juni 2013, 22:49
von Dami123
Nabend Community,
ich möchte ein paar Ideen mit Proxy Servern umsetzen und würde gern wissen welche Module ihr verwendet.
Hab hier bereits ein kleines Beispiel:
Code: Alles auswählen
import urllib
proxies = {'http': "http://118.174.144.130:3128"}
result = urllib.urlopen("http://www.whatismyip.com/", proxies=proxies)
print result.read()
whatismyip.com erkennt, dass ein Proxy verwendet wird. Soweit funktionierts.
Ist das Modul ausreichend oder bieten andere Module Funktionen an die theoretisch unerlässlich für ein größeres Programm sind?
und
Im Normalfall sind von meiner Seite aus keine Header Infos nötig, da der Proxy diese nicht ans Ziel mitsendet, um meine Anonymität zu sichern, oder?
Re: Welche Proxy Methode ist die beste?
Verfasst: Mittwoch 26. Juni 2013, 23:14
von DasIch
Requests ist urllib/urllib2 definitiv zu bevorzugen.
Re: Welche Proxy Methode ist die beste?
Verfasst: Dienstag 2. Juli 2013, 19:11
von Dami123
@DasIch stelle mich zurzeit auf "requests" um.
Bin am schreiben eines Programms, welches mit Proxies arbeitet. Eine Funktion ist dafür zuständig, dass meine Proxies getestet werden.
Wenn ein Proxy funktionsfähig ist, wird er per "return" wiedergegeben, wenn nicht wiederholt sich die Funktion selber, bis praktisch ein funktionierender Proxy ausgegeben werden kann. Hier die Funktion.
Code: Alles auswählen
import requests
def check_proxy():
try:
r = requests.get("http://173.194.113.178", proxies={"http": proxies[0]}, timeout=5)
proxy = proxies[0]
used_proxies.append(proxies[0])
proxies.remove(proxies[0])
return proxy
except:
used_proxies.append(proxies[0])
proxies.remove(proxies[0])
check_proxy()
with open("proxy_list.txt", "r") as proxies:
proxies = proxies.read().splitlines()
used_proxies=[]
for i in range(100):
print check_proxy()
Mein Problem beläuft sich nun auf den "Fehler" von "requests". Wenn nämlich der Proxy innerhalb des Timesouts nicht reagiert, bekomme ich als return "None". Der "except" fängt dies leider nicht ab und die Funktion läuft trotz abgelaufenen timeout weiter weiter.
Zwischenzeitlich verwende ich einen "None"-Filter beim Aufrufen, aber würde diesen gern loswerden.
Re: Welche Proxy Methode ist die beste?
Verfasst: Dienstag 2. Juli 2013, 19:26
von Sirius3
@Dami123: eine Funktion rekursiv aufzurufen ist generell eine schlechte Idee, da früher oder später das Rekusionslimit erreicht wird. Globalen Listen zu verändern ist auch nicht toll. Ein nacktes »except« zu verwenden dumm, da das die Fehlersuche behindert. Was erwartest Du denn für Exception-Typen?
Statt das teure »remove« reicht ein »pop(0)«. »proxies.read().splitline()« ist gleich wie »proxies.readlines()«:
Code: Alles auswählen
import requests
def check_proxies(proxies):
working = []
nonworking = []
for proxy in proxies:
proxy = proxy.strip()
try:
assert requests.get("http://173.194.113.178", proxies={"http": proxy}, timeout=5)
except (requests.exceptions.RequestException, AssertionError):
nonworking.append(proxy)
else:
working.append(proxy)
return working, nonworking
def main():
with open("proxy_list.txt", "r") as proxies:
working, nonworking = check_proxies(proxies)
print '\n'.join(working)
if __name__ == '__main__':
main()
Re: Welche Proxy Methode ist die beste?
Verfasst: Dienstag 2. Juli 2013, 20:59
von Dami123
Danke für die gute Korrektur

- ".read().splitline()" entfernt auch die newline im Gegensatz zu "readlines()"
- rekursiv wär in meinem Fall kein Problem, da die Funktion nur einen brauchbaren Proxy ausgeben soll. Aber für die Gewohnheit sollte ich keine Rekursion verwenden, das stimmt.
- ein nacktes "except" hab ich hier verwendet, da die Funktion erst aufgerufen wird, wenn mögliche Fehlerquellen nicht vorhanden sind und praktisch jeder sonstige Fehler der mir keinen funktionierenden Proxy ausgibt, nicht weiter beachtet werden soll.
- "pop()" bau ich ein.
Re: Welche Proxy Methode ist die beste?
Verfasst: Dienstag 2. Juli 2013, 21:14
von BlackJack
@Dami123: Unnötige Rekursion ist immer ein Problem. So etwas sollte man sich gar nicht erst angewöhnen. Zumal das hier eine echt umständliche Alternative zu einer simplen ``for``-Schleife war, wo jeder sofort versteht was da vor sich geht.
Du weist doch gar nicht welche Fehlerquellen nicht mehr vorhanden sind, das Problem ist doch gerade dass Du hier Fehler verschluckst mit denen Du nicht rechnest, und von denen Du auf diese Weise nie etwas erfährst, das heisst es können Proxies aussortiert werden die funktionieren, wo es aber irgend ein anderes Problem mit Deinem Programm gibt. Überlege zum Beispiel mal was mit Deiner tollen Rekursion passiert wenn keiner der Proxies funktioniert.
`pop()` solltest Du nicht einbauen. Du solltest Die Datenstruktur gar nicht unnötig verändern.
Re: Welche Proxy Methode ist die beste?
Verfasst: Mittwoch 3. Juli 2013, 00:33
von Dami123
Ich hab den Wald vor lauter Bäumen nicht gesehen... eine einfache "for"-Schleife ist die Lösung.

danke dafür.
Fehler versuch ich nun aufzufangen.