1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. from proxyPool.db import RedisClient
  4. import asyncio
  5. import aiohttp
  6. import time
  7. try:
  8. from aiohttp import ClientError,client_exceptions
  9. except:
  10. from aiohttp import ClientProxyConnectionError as ProxyConnectionError
  11. VALID_STATUS_CODES=[200]
  12. TEST_URL='http://www.baidu.com'
  13. BATCH_TEST_SIZE=100
  14. class Tester(object):
  15. def __init__(self):
  16. self.redis=RedisClient()
  17. async def test_single_proxy(self,proxy):
  18. """
  19. 测试单个代理
  20. :param proxy:单个代理
  21. :return: None
  22. """
  23. conn=aiohttp.TCPConnector(verify_ssl=False)
  24. async with aiohttp.ClientSession(connector=conn) as session:
  25. try:
  26. if isinstance(proxy,bytes):
  27. proxy=proxy.decode('utf-8')
  28. real_proxy='http://'+proxy
  29. print("正在测试",proxy)
  30. async with session.get(TEST_URL,proxy=real_proxy,timeout=15) as response:
  31. if response.status in VALID_STATUS_CODES:
  32. self.redis.max(proxy)
  33. print("代理可用",proxy)
  34. else:
  35. self.redis.decrease(proxy)
  36. print("请求响应码不合法",proxy)
  37. except(ClientError,client_exceptions.ClientConnectorError,TimeoutError,AttributeError):
  38. self.redis.decrease(proxy)
  39. print("代理请求失败",proxy)
  40.  
  41. def run(self):
  42. """
  43. 测试函数
  44. :return:None
  45. """
  46. print("测试器开始运行")
  47. try:
  48. proxies=self.redis.all()
  49. loop=asyncio.get_event_loop()
  50. #批量测试
  51. for i in range(0,len(proxies),BATCH_TEST_SIZE):
  52. test_proxies=proxies[i:i+BATCH_TEST_SIZE]
  53. tasks=[self.test_single_proxy(proxy) for proxy in test_proxies]
  54. loop.run_until_complete(asyncio.wait(tasks))
  55. time.sleep(5)
  56. except Exception as e:
  57. print("测试器发生错误",e.args)

  

aiohttp/asyncio测试代理是否可用的更多相关文章

  1. Python爬虫-代理池-爬取代理入库并测试代理可用性

    目的:建立自己的代理池.可以添加新的代理网站爬虫,可以测试代理对某一网址的适用性,可以提供获取代理的 API. 整个流程:爬取代理 ----> 将代理存入数据库并设置分数 ----> 从数 ...

  2. curl测试代理连接某个域名的连接时间

    缘由:需要查询一下某些代理访问指定域名所消耗的时间,来判断是否是代理连接受限 以下代理均为示例代理,无法真正连接 1. 通过curl方式来测试指定代理的连接情况,代理无账号密码 curl -x 127 ...

  3. python测试代理IP地址

    代码: # -*- coding: utf-8 -*- import urllib,urllib2,re from random import choice from scrapy.selector ...

  4. windows使用proxifier全局代理 - 配置可用; windows10 配置全局代理 走 socks5

    最近windows上需要配置全局代理 走 socks5,发现同类型的有 cow pcap 等解决方案,通过尝试发现还是proxifier 比较好用! 下载:https://www.proxifier. ...

  5. jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)

    实现基本异步数据传输,略去与数据库交换,先直接在PHP端判断:用户名为 user1 即为不可用, 测试时外加了 普遍的 “Loading..." 功能,此功能可直接在PHP中循环延时 for ...

  6. aiohttp/asyncio 小例子和解释

    #!/usr/bin/env python # encoding: utf-8 import aiohttp import asyncio import time # 通过async def定义的函数 ...

  7. aiohttp/asyncio 多次请求

    #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = "Daniel Altiparmak (sixfinger78@gmai ...

  8. 模拟post请求-->测试api是否可用-->再交给ios开发

    提交给iso开发前.先模拟post提交,测试返回是否正确 =============post.php文件 ios每次最少要提交5个数据, 加密串 seqno , 请求验证码 source, 设备唯一标 ...

  9. Nginx 反向代理+高可用

    反向代理主机IP:10.0.0.20 WEB01主机IP : 10.0.0.22 WEB02主机IP : 10.0.0.23 反向代理主机配置:10.0.0.20 [root@node1 html]# ...

随机推荐

  1. [Codeforces958E2]Guard Duty (medium)(区间DP)

    Description 题目链接 Solution 可以把题目转化一下模型,将间隔取出来,转化为N-1个数,限制不能取相邻两个数,求取K个数的最小价值 设DP[i][j]表示前i个数取j个最大价值(第 ...

  2. java.lang.NoSuchMethodError: cn.makangning.test.dao.Users.getUserBirthday()Ljava/sql/Date;

    有时候出现这种怪异的问题,是由于多个版本的class存在. 比如说:某个java编译成class后,放到classes下面,然后lib目录下,也有这个class所在的jar包,这样就导致classpa ...

  3. Matplotlib库介绍

    pyplot的plot()函数 pyplot的中文显示 pyplot的文本显示 pyplot的子绘图区域

  4. HDU 5293 Tree chain problem 树形DP

    题意: 给出一棵\(n\)个节点的树和\(m\)条链,每条链有一个权值. 从中选出若干条链,两两不相交,并且使得权值之和最大. 分析: 题解 #include <cstdio> #incl ...

  5. JS 金钱格式化

    JavaScript Money Format(用prototype对Number进行扩展) Number.prototype.formatMoney = function (places, symb ...

  6. 让NVelocity做更多的事,VS Extension+NVelocity系列

    我不知道园子里到底有多少人喜欢使用NVelocity这个模板引擎,其实说实话,如果现在让我选,我对Razor的喜好要比NVelocity或者T4等等的模板引擎更多一些,当然了,个人看法而已.只是我在公 ...

  7. C语言库函数实现 【微软面试100题 第八十三题】

    题目要求 1.strcpy/memcpy/memmove: 2.memset函数: 3.字符串处理函数. 题目分析 1.接口定义: char * strcpy(char * dest, const c ...

  8. 抓取网站访问者的QQ号码

    开源,是一种精神.但不开源,并不是没有精神,而可能是代码写得惨不忍睹,我属于后者.(首先申明:对代码提出意见可接受,虚心接受,但不能人身攻击啊!)     最近闲的蛋疼,喜欢到处看看做得好的站点, 莫 ...

  9. 【Balanced Binary Tree】cpp

    题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...

  10. Git上手:Git扫盲区

    Git 自述Git 是由伟大的电脑程序员Linus Torvalds编写的一个开源的,分布式的版本控制系统软件. Git 核心原理Git 利用底层数据结构,通过指向索引对象的可变指针,保存文件快照. ...