Beispiel #1
0
 def check(self, proxy: ProxyModel):
     if proxy.protocol == 'https':
         judge = self.https_judge
     else:
         judge = self.http_judge
     content = None
     connector = proxy.connector
     try:
         start = time.time()
         connector.connect()  # connect to proxy
         proxy.speed = int((time.time() - start) * 1000)
         connector.negotiate(judge)  # proxy connect to test web
         request, request_headers = judge.build_request(self._method, fullpath=connector.use_full_path)  # build test request
         connector.send(request)  # send request
         content = connector.recv()  # fetch response
         judge.parse_response(proxy, content, request_headers)  # parse response body and verify anonymity of proxy
     except (socket.gaierror, RecvTimeout, ConnectTimeout, ConnectionResetError, IndexError, SSLError, ValueError, HTTPParseError, ConnectionAbortedError, BadResponseError, ProxySendError) as e:
         proxy.exception = e
     except BadStatusError as e:
         proxy.exception = e
     except JSONDecodeError:
         logger.error('Json decode error when using %s' % proxy)
         logger.debug(content)
     except Exception as e:
         proxy.exception = e
         logger.error('Unexpected exception: %s, exception type: %s' % (proxy, type(e)))
         logger.exception(e)
     proxy.verified_at = datetime.datetime.now()
     logger.debug('%s verified' % proxy)
     return proxy
Beispiel #2
0
 async def check(self, proxy: ProxyModel):
     logger.debug('Start Verify Proxy: %s' % proxy)
     proxy.usable = False
     judge = self.https_judge if proxy.protocol == 'https' else self.http_judge
     content = None
     conn = Connector(proxy.ip, proxy.port)
     negotiator = NGTRS[proxy.protocol.upper()](conn)
     try:
         await conn.connect()
         await negotiator.negotiate(judge)
         headers, content, hdrs = await _send_test_request(
             self._method, conn, negotiator, judge)
         content = _decompress_content(headers, content)
         judge.parse_response(proxy, content, hdrs)
     except ProxyError:
         pass
     except JSONDecodeError:
         # Config.logger.error('Json decode error when using %s' % proxy)
         logger.debug(content)
     except Exception as e:
         logger.error('Error: %s, type: %s' % (proxy, type(e)),
                      exc_info=True)
     finally:
         conn.close()
     proxy.verified_at = datetime.datetime.now()
     self.finished += 1
     logger.debug('Finished Proxy: %s' % (proxy))
     return proxy
Beispiel #3
0
def __remove_exist_proxies(pm, proxies):
    all_proxy = set()
    for i in pm.all_proxy():
        all_proxy.add('%s:%d' % (i.ip, i.port))
    result = []
    for i in proxies:
        if i not in all_proxy:
            result += [
                ProxyModel.from_url('%s://%s' % (j, i))
                for j in ['http', 'https', 'socks5']
            ]
    logger.info('Remove %d exist proxies' % (len(proxies) - len(result) / 3))
    return result
Beispiel #4
0
 def parse_response(self, proxy: ProxyModel, resp: str, hdrs):
     resp = json.loads(resp)
     proxy.usable = True
     proxy.ip_feedback = resp['origin']
     ret_header = resp['headers']
     extra_headers = {}
     for x in ret_header:
         if x.lower() in ['host']:
             continue
         if x in hdrs and ret_header[x] == hdrs[x]:
             continue
         extra_headers[x] = ret_header[x]
     if len(extra_headers) == 0:
         proxy.anonymity = int(Anonymity.Elite)
     else:
         proxy.extra_headers = str(extra_headers)
         __forwarded = 'X-Forwarded-For'
         if __forwarded in extra_headers:
             if self.ip in ret_header[__forwarded]:
                 proxy.anonymity = int(Anonymity.Transparent)
             elif proxy.ip in ret_header[__forwarded]:
                 proxy.anonymity = int(Anonymity.Anonymous)
             else:
                 proxy.anonymity = int(Anonymity.Confuse)
Beispiel #5
0
from manager import ProxyManager
from model import ProxyModel

if __name__ == '__main__':
    # Config.Base.metadata.drop_all(Config.engine)
    # Config.Base.metadata.create_all(Config.engine)
    pm = ProxyManager()
    pm.add_proxy(ProxyModel.instance('http://27.208.25.190:8060'))
Beispiel #6
0
 def verify_failed(self, proxy: ProxyModel):
     proxy.failed += 1
     if proxy.success - proxy.failed > 15:
         proxy.verifiable = 0
# coding:utf-8
import asyncio
import time

from model import ProxyModel
from proxy_verifier import ProxyAsyncVerifier

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    start = time.time()
    proxy = ProxyModel.from_url('socks5://127.0.0.1:1080')
    task = asyncio.ensure_future(ProxyAsyncVerifier(loop).check(proxy))
    loop.run_until_complete(task)
    print(time.time() - start)
    print(task.result())
    print(proxy.usable)
Beispiel #8
0
from model import ProxyModel
from manager import ProxyManager

if __name__ == '__main__':
    # Config.Base.metadata.drop_all(Config.engine)
    # Config.Base.metadata.create_all(Config.engine)
    pm = ProxyManager()
    pm.add_proxy(ProxyModel.from_url('http://27.208.25.190:8060'))