Python 判断代理ip是否可用

from concurrent.futures import ThreadPoolExecutor, as_completed
import socket

# 判断ip_port是否能够连接上
def try_connection(ip_port):
   s = socket.socket()
   # 等待最大时间设定为5秒(可改小)
   s.settimeout(5)
   # 尝试连接目标ip_port
   try:
       s.connect(ip_port)
   # 捕获连接超时错误并生成超时info
   except socket.timeout as e:
       info = ip_port[0] + ':' + str(ip_port[1]) + ' 超时'
   # 捕获连接错误并生成错误info
   except socket.error as e:
       info = ip_port[0] + ':' + str(ip_port[1]) + ' ' + str(e)
   # 确认ip_port可用,生成可用info
   else:
       info = ip_port[0] + ':' + str(ip_port[1]) + ' 可用'
   # 最后关闭socket对象并返回info
   finally:
       s.close()
       return info

# 生成多线程池对象,最大线程数为10(可调大)
executor = ThreadPoolExecutor(max_workers=10)
# 读取文件中的ip_port(每行一个),并打开信息文件备用
with open('server.txt','r') as fin, open('connection.txt','w') as fout:
   servers = []
   for addr in fin:
       ip, port = addr.split(':')
       port = int(port)
       # 向servers列表添加读取出的ip_port
       servers.append((ip, port))
   # 进行多线程访问并验证
   for result in executor.map(try_connection, servers):
     # 结果并写入文件
       print(result)
       fout.write(result + '\n')
posted @ 2021-07-13 13:38  CJTARRR  阅读(335)  评论(0)    收藏  举报