12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- from proxypool.schemas import Proxy
- def is_valid_proxy(data):
- """
- check this string is within proxy format
- """
- if is_auth_proxy(data):
- host, port = extract_auth_proxy(data)
- return is_ip_valid(host) and is_port_valid(port)
- elif data.__contains__(':'):
- ip = data.split(':')[0]
- port = data.split(':')[1]
- return is_ip_valid(ip) and is_port_valid(port)
- else:
- return is_ip_valid(data)
- def is_ip_valid(ip):
- """
- check this string is within ip format
- """
- if is_auth_proxy(ip):
- ip = ip.split('@')[1]
- a = ip.split('.')
- if len(a) != 4:
- return False
- for x in a:
- if not x.isdigit():
- return False
- i = int(x)
- if i < 0 or i > 255:
- return False
- return True
- def is_port_valid(port):
- return port.isdigit()
- def convert_proxy_or_proxies(data):
- """
- convert list of str to valid proxies or proxy
- :param data:
- :return:
- """
- if not data:
- return None
- # if list of proxies
- if isinstance(data, list):
- result = []
- for item in data:
- # skip invalid item
- item = item.strip()
- if not is_valid_proxy(item): continue
- if is_auth_proxy(item):
- host, port = extract_auth_proxy(item)
- else:
- host, port = item.split(':')
- result.append(Proxy(host=host, port=int(port)))
- return result
- if isinstance(data, str) and is_valid_proxy(data):
- if is_auth_proxy(data):
- host, port = extract_auth_proxy(data)
- else:
- host, port = data.split(':')
- return Proxy(host=host, port=int(port))
- def is_auth_proxy(data: str) -> bool:
- return '@' in data
- def extract_auth_proxy(data: str) -> (str, str):
- """
- extract host and port from a proxy with authentication
- """
- auth = data.split('@')[0]
- ip_port = data.split('@')[1]
- ip = ip_port.split(':')[0]
- port = ip_port.split(':')[1]
- host = auth + '@' + ip
- return host, port
- if __name__ == '__main__':
- proxy = 'test1234:[email protected]:32425'
- print(extract_auth_proxy(proxy))
|