【问题标题】:Rate Limiting the Number of cURL request given from a bash script [duplicate]限制从 bash 脚本给出的 cURL 请求的数量 [重复]
【发布时间】:2017-04-09 15:36:25
【问题描述】:

我编写了 bash 脚本来计算文件的哈希,当它是给定的文件路径并查询文件哈希中的一个以从 API 服务中获取该哈希的结果(使用 jq 进行解析)。

#Scanner.sh

#!/bin/bash

for i in $(find $1 -type f);do
    md5_checksum=$(md5sum $i|cut -d' ' -f 1)
    sha1_checksum=$(sha1sum $i|cut -d' ' -f 1)
    sha256_checksum=$(sha256sum $i|cut -d' ' -f 1)
    json_result="$(curl --silent -H 'Authorization:Basic XXXX' 'https://XXXXX.com/api/databrowser/malware_presence/query/sha1/'$sha1_checksum'?format=json&extended=true'| jq -r '.rl.malware_presence.name,.rl.malware_presence.level' | awk -vORS=, '{print $1}' |sed 's/,$/\n/')"
    echo "$md5_checksum,$sha1_checksum,$sha256_checksum,$json_result"
done


#Result : 
c63a1576e4b416e6944a1c39dbdfc3b4,fd55dfdd9a432e34ce6c593cd09a48f457f7aab6,e2d1c1975c2406f60f1c0fe5255560c2cd06434e669933536a86296a2eb70020,Malware,5

现在,处理一个文件并获得一个文件哈希的结果(10 秒)花费了太多时间。我怎样才能每秒发送 5 个请求并更快地获得结果?

有什么建议吗?

【问题讨论】:

    标签: bash jq


    【解决方案1】:

    你可以把你的代码放在一个函数中并在后台运行它,像这样:

        runCurl() {
            md5_checksum=$(md5sum $1|cut -d' ' -f 1)
            sha1_checksum=$(sha1sum $1|cut -d' ' -f 1)
            sha256_checksum=$(sha256sum $1|cut -d' ' -f 1)
            json_result="$(curl --silent -H 'Authorization:Basic XXXX' 'https://XXXXX.com/api/databrowser/malware_presence/query/sha1/'$sha1_checksum'?format=json&extended=true'| jq -r '.rl.malware_presence.name,.rl.malware_presence.level' | awk -vORS=, '{print $1}' |sed 's/,$/\n/')"
            echo "$md5_checksum,$sha1_checksum,$sha256_checksum,$json_result"
        }
    
        for i in $(find $1 -type f);do
            runCurl $i &
        done
    

    【讨论】:

    • 谢谢,这行得通。但是使用“&”可能会启动多个请求。这可能会轰炸 API 服务服务器。我怎样才能限制速率?例如,每分钟 50 次查询?
    • 您可以使用wait命令等待当前后台任务完成。所以也许你可以每 5 个请求使用这个命令。
    猜你喜欢
    • 2017-08-09
    • 1970-01-01
    • 2013-12-07
    • 2021-11-18
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    相关资源
    最近更新 更多