proxy.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from proxypool.schemas import Proxy
  2. def is_valid_proxy(data):
  3. """
  4. check this string is within proxy format
  5. """
  6. if data.__contains__(':'):
  7. ip = data.split(':')[0]
  8. port = data.split(':')[1]
  9. return is_ip_valid(ip) and is_port_valid(port)
  10. else:
  11. return is_ip_valid(data)
  12. def is_ip_valid(ip):
  13. """
  14. check this string is within ip format
  15. """
  16. a = ip.split('.')
  17. if len(a) != 4:
  18. return False
  19. for x in a:
  20. if not x.isdigit():
  21. return False
  22. i = int(x)
  23. if i < 0 or i > 255:
  24. return False
  25. return True
  26. def is_port_valid(port):
  27. return port.isdigit()
  28. def convert_proxy_or_proxies(data):
  29. """
  30. convert list of str to valid proxies or proxy
  31. :param data:
  32. :return:
  33. """
  34. if not data:
  35. return None
  36. # if list of proxies
  37. if isinstance(data, list):
  38. result = []
  39. for item in data:
  40. # skip invalid item
  41. item = item.strip()
  42. if not is_valid_proxy(item): continue
  43. host, port = item.split(':')
  44. result.append(Proxy(host=host, port=int(port)))
  45. return result
  46. if isinstance(data, str) and is_valid_proxy(data):
  47. host, port = data.split(':')
  48. return Proxy(host=host, port=int(port))