2012-02-18 3 views
0

У меня есть сценарий (с помощью интернет-ресурсов), который берет список доступных прокси с определенного сайта, а затем проверяет один за другим, чтобы найти рабочий прокси. После того, как он обнаружил, что он создает и открывает этот прокси. Вот мой код.Работа с прокси

import urllib2 
import urllib 
import cookielib 
import socket 
import time 

def getOpener(pip=None): 
    if pip: 
     proxy_handler = urllib2.ProxyHandler({'http': pip}) 
     opener = urllib2.build_opener(proxy_handler) 
    else: 
     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) 
    opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1')] 
    urllib2.install_opener(opener) 
    return opener 

def getContent(opnr, url): 
    req = urllib2.Request(url) 
    sock = opnr.open(req) 
    return sock.read() 

def is_bad_proxy(pip): 
    try: 
     opnr = getOpener(pip) 
     data = getContent(opnr, 'http://www.google.com') 
    except urllib2.HTTPError, e: 
     return e.code 
    except Exception, detail: 
     return True 
    return False 

def getProxiesList(): 
    proxies = [] 
    opnr = getOpener() 
    content = getContent(opnr, 'http://somesite.com/') 
    urls = re.findall("<a href='([^']+)'[^>]*>.*?HTTP Proxies.*?</a>", content) 
    for eachURL in urls: 
     content = getContent(opnr, eachURL) 
     proxies.extend(re.findall('\d{,3}\.\d{,3}\.\d{,3}\.\d{,3}:\d+', content)) 
    return proxies 

def getWorkingProxy(proxyList, i=-1): 
    for j in range(i+1, len(proxyList)): 
     currentProxy = proxyList[j] 
     if not is_bad_proxy(currentProxy): 
      log("%s is working" % (currentProxy)) 
      return currentProxy, j 
     else: 
      log("Bad Proxy %s" % (currentProxy)) 
    return None, -1 

if __name__ == "__main__": 
    socket.setdefaulttimeout(60) 
    proxyList = getProxiesList() 
    proxy, index = getWorkingProxy(proxyList) 
    if proxy: 
     _web = getOpener(proxy) 

И я должен повторять этот процесс снова и снова, когда я использую один прокси-сервер в некоторой степени. Проблема does building an opener again and again will cause issues?? Потому что я имею следующую ошибку HTTPError: HTTP Error 503: Too many open connections. Пожалуйста, помогите мне в чем причина ошибки? Заранее спасибо.

+0

Возможно, ваш список содержит один и тот же прокси-сервер несколько раз, и у него есть ограничение на соединение? – cha0site

+0

Может быть, причина, я проверил, и прокси-лист содержит дубликаты. –

ответ

0

Я проверил и proxyList содержит дубликаты. Так много openers пытались использовать тот же прокси-сервер, который вызвал ошибку HTTPError: HTTP Error 503: Too many open connections

Смежные вопросы