【问题标题】:Python, checking if a proxy is alive?Python,检查代理是否存在?
【发布时间】:2011-08-25 09:41:38
【问题描述】:

代码:

 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. 格式错误,我尝试使用 strip() 删除换行符 但没有运气。

有什么想法吗?

【问题讨论】:

    标签: python proxy urllib2


    【解决方案1】:

    你应该使用线程来让代码运行得更快:

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

    【讨论】:

      【解决方案2】:

      第一个想法,设置一个比默认值更短的超时

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

      您也可以使用线程,以便同时测试多个连接。

      【讨论】:

        【解决方案3】:

        对于格式化,使用 strip() 应该没问题:

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

        【讨论】:

          猜你喜欢
          • 2016-11-05
          • 1970-01-01
          • 2020-02-23
          • 2013-09-19
          • 2015-10-19
          • 2013-12-25
          • 2013-05-22
          • 2019-08-03
          • 1970-01-01
          相关资源
          最近更新 更多