重构代理池

本文介绍了一种通过Ping命令验证代理服务器有效性的方法,并详细讲解了如何利用Python的subprocess包来实现这一过程,包括创建进程、读取输出及解析关键信息如丢包次数和延时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前有建过代理词,但是都不太理想,今天看到一篇文章通过ping的方式验证代理有效性,深以为然

哆啦咪

验证代理有效性

命令:

cmd = "ping -n 3 -w 3 127.0.0.1"

在python实现通过内置subprocess

主要用法如下:

Subprocess.Popen()可以创建一个进程,当shell参数为true时,程序通过shell来执行:

  •     参数args可以是字符串或者序列类型(如:list,元组),用于指定进程的可执行文件及其参数。如果是序列类型,第一个元素通常是可执行文件的路径。我们也可以显式的使用executeable参数来指定可执行文件的路径。
  •     参数stdin, stdout,stderr分别表示程序的标准输入、输出、错误句柄。他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。
  •     如果参数shell设为true,程序将通过shell来执行。
  •     subprocess.PIPE:在创建Popen对象时,subprocess.PIPE可以初始化stdin,stdout或stderr参数。表示与子进程通信的标准流。
  •     subprocess.STDOUT:创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出流输出。
cmd = f'ping -n 3 -w 3 {proxy.get("ip")}'
p = sp.Popen(cmd, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE, shell=True)
out = p.stdout.read().decode('gbk')
lose_time = re.search(r'丢失 = (\d)', out).group(1)
ave_time = re.search(r'平均 = (\d+)ms', out).group(1)

输出如下:(可通过正则获取关键属性丢包次数、延时等,或许也可以通过内置属性直接获得上述值~)

正在 Ping 112.85.129.140 具有 32 字节的数据:
来自 112.85.129.140 的回复: 字节=32 时间=21ms TTL=49
来自 112.85.129.140 的回复: 字节=32 时间=22ms TTL=49
来自 112.85.129.140 的回复: 字节=32 时间=19ms TTL=49

112.85.129.140 的 Ping 统计信息:
    数据包: 已发送 = 3,已接收 = 3,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 19ms,最长 = 22ms,平均 = 20ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值