【问题标题】:How to easily obtain the latency of proxies with only a few lines of code in python? [closed]如何在python中仅用几行代码轻松获得代理的延迟? [关闭]
【发布时间】:2021-02-27 23:54:18
【问题描述】:

我正在我的一个脚本中制作一些东西,它应该能够清除我所有的缓慢代理。代理存储在每一行一个名为 proxies.txt 的文件中。我希望能够使用变量指定以毫秒为单位的最大延迟。我在这里看到了一个类似的问题Python requests find proxy latency,但没有得到答复。如果有办法做到这一点,请告诉我。

【问题讨论】:

  • 你在哪个平台上?如果您使用的是 Linux/Unix,则可以使用 curl,但这些是 HTTP/HTTPS 代理吗?你目前有办法在 Python 中使用代理吗?是什么阻止您使用requests with a proxy 来衡量某个 URL 的平均 ping 时间,例如在您链接的答案中?

标签: python python-3.x proxy latency


【解决方案1】:

这不是您所要求的 100%,这将返回真或假,具体取决于代理是否及时响应

def ping(host):

    param = '-n' if platform.system().lower() == 'windows' else '-c'

    command = ['ping', param, '1', '-w', 250, '-n', '1', host]
    return subprocess.call(command, stdout=subprocess.PIPE) == 0

如果它在 250 毫秒内响应,则返回一个布尔值(真或假)。我确信修改它以返回它以返回正确的值很容易。然后,您需要做的就是将其放入文件中每一行的 for 循环中。同样,您必须从代理测试中删除端口号和分号,然后重新附加它,就像我在这段代码中所做的那样: 如果您想使用它,您必须更改它,因为这是来自我编写的项目。

def check_proxies(filename):
    filename = str(filename)
    f = open(filename)
    lines = 0
    for _ in f:
        lines = lines + 1
    f.close()

    EstimatedTime = lines * config.Ping_Timeout
    print(f"{bcolors.Blue}Checking proxies... this will take at max {bcolors.OKGREEN}{EstimatedTime / 1000}{bcolors.Blue} seconds{bcolors.ENDC}")

    with open(filename) as f:
        workingProxies = []
        LineNum = 0
        for line in f.readlines():
            line = line.strip("\n").strip('\r')
            line = line.split(":")
            line_port = line[1]
            line_ip = line[0]
            if LineNum == 50:
                if config.extras.Proxy_Joke.Proxy_Joke_Extra:
                    Info.print_dad_joke()
                else:
                    pass
            LineNum = LineNum + 1
            if ping(line_ip):
                workingProxies = workingProxies + [f"{line_ip}:{line_port}"]
            else:
                pass
        if len(workingProxies) == 0:
            print("Error, no working proxies were detected, are you connected to the internet?")
    return workingProxies


def get_file_lines():
    InputProxies = 0
    with open(config.Proxy_File) as G:
        for _ in G.readlines():
            InputProxies = InputProxies + 1
    return InputProxies

我不知道该怎么做你想做的事,但这在我从事的项目中对我有用。

【讨论】:

  • 我能够很好地实现它,但是当它尝试执行命令时,它会发送这样的垃圾邮件:“ping: 62.75.203.118:3838: Name or service not known ping: 195.154. 237.156:3838:名称或服务未知 ping:79.101.98.2:53281:名称或服务未知 ping:85.25.15.211:3838:名称或服务未知 ping:51.15.149.176:3838:名称或服务未知 ping: 46.255.99.7:41258:名称或服务未知 ping:182.253.169.40:8080:名称或服务未知 ping:212.83.157.111:3838:名称或服务未知”如果有帮助的话,我在 debian 10 上。
  • 我需要更多的上下文来肯定地回答这个问题,但听起来问题是当你 ping 每个代理时,你需要剥离端口。仅根据您向我展示的内容,我无法判断您是否这样做。但是在“check_proxies”中,它会抓取完整的代理(例如:12.34.567.890:1234)并在冒号处将其拆分,从而为您提供 ["12.34.567.890", "1234" 然后使用 ping 函数来 ping "line[0] " 如果返回 true,那么工作代理是 line[0] + ":" + line[1],这将是 (12.34.567.890:1234) 我使用 Windows,但我很确定你不能用 Debian 上的端口 ping 一个 IP。
  • @Supergamer5465 另外,如果这没有多大意义,那是因为我已经起床一个小时了,如果您需要更多帮助,请回复此问题,我不会睡着的。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 2019-02-07
  • 2012-04-20
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多