proxy.py 1.2 KB

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