validators.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # -*- coding: utf-8 -*-
  2. import re
  3. import requests
  4. from re import findall
  5. from handler.configHandler import ConfigHandler
  6. conf = ConfigHandler()
  7. validators = []
  8. def validator(func):
  9. validators.append(func)
  10. return func
  11. @validator
  12. def formatValidator(proxy):
  13. """
  14. 检查代理格式
  15. :param proxy:
  16. :return:
  17. """
  18. verify_regex = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}"
  19. _proxy = findall(verify_regex, proxy)
  20. return True if len(_proxy) == 1 and _proxy[0] == proxy else False
  21. @validator
  22. def timeOutValidator(proxy):
  23. """
  24. 检测超时
  25. :param proxy:
  26. :return:
  27. """
  28. proxies = {"http": "http://{proxy}".format(proxy=proxy), "https": "https://{proxy}".format(proxy=proxy)}
  29. headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
  30. 'Accept': '*/*',
  31. 'Connection': 'keep-alive',
  32. 'Accept-Language': 'zh-CN,zh;q=0.8'}
  33. try:
  34. r = requests.head(conf.verifyUrl, headers=headers, proxies=proxies, timeout=conf.verifyTimeout, verify=False)
  35. if r.status_code == 200:
  36. return True
  37. except Exception as e:
  38. pass
  39. return False
  40. @validator
  41. def customValidator(proxy):
  42. """
  43. 自定义validator函数,校验代理是否可用
  44. :param proxy:
  45. :return:
  46. """
  47. proxies = {"http": "http://{proxy}".format(proxy=proxy), "https": "https://{proxy}".format(proxy=proxy)}
  48. r = requests.get(url='http://myip.ipip.net', proxies=proxies, timeout=conf.verifyTimeout, verify=False)
  49. proxies = re.findall(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})',
  50. r.text)
  51. if len(proxies) > 0:
  52. return True
  53. else:
  54. return False