这里只用Python简单实现测试http代理的ip是否可用
import requests
import os
import queue
from concurrent.futures import ThreadPoolExecutor, as_completed
class TestIP:
def __init__(self, ip_file):
self.q = queue.Queue()
if os.path.exists(ip_file):
with open(ip_file, 'r+', encoding='utf-8') as f:
[self.q.put(ip_port.strip()) for ip_port in f.readlines()]
else:
print(f'[-] 指定ip文件不存在!!')
def sigin_test_ip(self, ip_port):
proxies = {
"http": f'http://{ip_port}',
"https": f'http://{ip_port}'
}
# 空白位置为测试代理ip和代理ip使用端口
headers = {"User-Agent": "Mozilla/5.0"}
try:
# 响应头
requests.get("http://www.baidu.com/", proxies=proxies, headers=headers, timeout=3)
# 发起请求
print(f'[TH-{self.th}][OK]===> {ip_port}')
return ip_port
except Exception as e:
print(f'[TH-{self.th}][FAIL]===> {ip_port}')
return False
def test_main(self, th):
self.th = th
task_list = [] # 线程任务
relt_list = [] # 结果列表
# 开启线程池 max_workers表示支持的最大线程数
with ThreadPoolExecutor(max_workers=th) as t:
while not self.q.empty():
ip_port = self.q.get()
thr = t.submit(self.sigin_test_ip, ip_port)
task_list.append(thr)
self.q.task_done()
# 判断单个线程是否执行完毕
for future in as_completed(task_list):
ok_ip_port = future.result()
if ok_ip_port:
relt_list.append(ok_ip_port)
return relt_list
if __name__ == '__main__':
tm = TestIP(ip_file='./ip.txt')
ok_ip_list = tm.test_main(th=30)
print(ok_ip_list)
if ok_ip_list:
with open('ok_ip.txt', 'w+', encoding='utf-8') as f:
f.write('\n'.join(ok_ip_list))