2011-08-25 2 views
0

Le code:Python, vérifiant si un proxy est en vie?

for item in pxfile.readlines(): 
    if is_OK(item): 
     sys.stdout.write(item + "is not OK.") 
     item = make(item) 
     item = "#" + item 
     resfile.write(item) 
    else: 
     sys.stdout.write(item) 
     sys.stdout.write("is OK.") 
     line = make(item) 
     resfile.write(item) 

Si is_OK est vrai, cela signifie que le mandataire n'existe pas, devrait résoudre ce problème.

def is_OK(ip): 
    try: 
     proxy_handler = urllib2.ProxyHandler({'http': ip}) 
     opener = urllib2.build_opener(proxy_handler) 
     opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
     urllib2.install_opener(opener) 
     req=urllib2.Request('http://www.icanhazip.com') 
     sock=urllib2.urlopen(req) 
    except urllib2.HTTPError, e: 
     #print 'Error code: ', e.code 
     return e.code 
    except Exception, detail: 

     #print "ERROR:", detail 
     return 1 
    return 0 

Il faut 10 minutes pour obtenir une liste comme ceci:

141.219.252.132:68664 
is OK.118.174.0.155:8080 
is OK.91.194.246.169:8080 
is not OK.91.194.246.81:8080 
is OK.201.245.110.138:8888 
is OK.202.43.178.31:3128 
is OK.202.109.80.106:8080 
  1. est-il un moyen de le rendre plus rapide?
  2. Il est mal formaté, j'ai essayé de supprimer le saut de ligne avec strip() mais pas de chance.

Des idées?

Répondre

1

idée d'abord, définir un délai plus court que par défaut

timeout = 10 
sock=urllib2.urlopen(req, None, timeout) 

Vous pouvez également enfiler utilisez afin que vous puissiez tester plusieurs connexions simultanément.

1

Et pour le formatage, la bande à l'aide() de cette façon devrait être ok:

for line in pxfile: 
    item = line.strip() 
    if is_OK(item): 
     sys.stdout.write(item + " is not OK.\n") 
     resfile.write("# " + make(item) +"\n") 
    else: 
     sys.stdout.write(item + " is OK.\n") 
     resfile.write(make(item) +"\n") 
3

Vous devez utiliser des fils pour faire fonctionner de code plus rapide:

import urllib2, threading 

def is_OK(ip): 
    print 'Trying %s ...' % ip 
    try: 
     proxy_handler = urllib2.ProxyHandler({'http': ip}) 
     opener = urllib2.build_opener(proxy_handler) 
     opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
     urllib2.install_opener(opener) 
     req=urllib2.Request('http://www.icanhazip.com') 
     urllib2.urlopen(req) 
     print '%s is OK' % ip 
    except urllib2.HTTPError: 
     print '%s is not OK' % ip 
    except Exception: 
     print '%s is not OK' % ip 

a = threading.Thread(None, is_OK, None, ("hostname1",), None) 
a.start() 
b = threading.Thread(None, is_OK, None, ("hostname2",), None) 
b.start() 
Questions connexes