proxy.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from proxypool.schemas import Proxy
  2. def is_valid_proxy(data):
  3. """
  4. check this string is within proxy format
  5. """
  6. if is_auth_proxy(data):
  7. host, port = extract_auth_proxy(data)
  8. return is_ip_valid(host) and is_port_valid(port)
  9. elif data.__contains__(':'):
  10. ip = data.split(':')[0]
  11. port = data.split(':')[1]
  12. return is_ip_valid(ip) and is_port_valid(port)
  13. else:
  14. return is_ip_valid(data)
  15. def is_ip_valid(ip):
  16. """
  17. check this string is within ip format
  18. """
  19. if is_auth_proxy(ip):
  20. ip = ip.split('@')[1]
  21. a = ip.split('.')
  22. if len(a) != 4:
  23. return False
  24. for x in a:
  25. if not x.isdigit():
  26. return False
  27. i = int(x)
  28. if i < 0 or i > 255:
  29. return False
  30. return True
  31. def is_port_valid(port):
  32. return port.isdigit()
  33. def convert_proxy_or_proxies(data):
  34. """
  35. convert list of str to valid proxies or proxy
  36. :param data:
  37. :return:
  38. """
  39. if not data:
  40. return None
  41. # if list of proxies
  42. if isinstance(data, list):
  43. result = []
  44. for item in data:
  45. # skip invalid item
  46. item = item.strip()
  47. if not is_valid_proxy(item): continue
  48. if is_auth_proxy(item):
  49. host, port = extract_auth_proxy(item)
  50. else:
  51. host, port = item.split(':')
  52. result.append(Proxy(host=host, port=int(port)))
  53. return result
  54. if isinstance(data, str) and is_valid_proxy(data):
  55. if is_auth_proxy(data):
  56. host, port = extract_auth_proxy(data)
  57. else:
  58. host, port = data.split(':')
  59. return Proxy(host=host, port=int(port))
  60. def is_auth_proxy(data: str) -> bool:
  61. return '@' in data
  62. def extract_auth_proxy(data: str) -> (str, str):
  63. """
  64. extract host and port from a proxy with authentication
  65. """
  66. auth = data.split('@')[0]
  67. ip_port = data.split('@')[1]
  68. ip = ip_port.split(':')[0]
  69. port = ip_port.split(':')[1]
  70. host = auth + '@' + ip
  71. return host, port
  72. if __name__ == '__main__':
  73. proxy = 'test1234:[email protected]:32425'
  74. print(extract_auth_proxy(proxy))