2011-08-25 125 views
0

代碼:Python,檢查代理是否還活着?

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) 

如果is_OK是事實,就意味着代理不存在,應該解決這個問題。

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 

它需要10分鐘,得到這樣的列表:

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. 有沒有一種方法,使其更快?
  2. 它的格式很差,我嘗試刪除換行符() 但沒有運氣。

任何想法?

回答

1

第一個想法,設置較短的超時默認情況下比一個

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

你也可以使用線程,因此可以同時測試多個連接。

1

而對於格式,使用帶()這樣應該沒問題:

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

你應該使用線程來使代碼運行更快:

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()