bash:在循环中 curl 并行请求

标签 bash rest curl

我想从 api (json) 下载超过 100k 的应用程序定义 我有一个简单的脚本:

BASE_PATCH="/media/sf_1/getappid/"

rm -rf ${BASE_PATCH}results

while read -r package <&3; do

            mkdir -p ${BASE_PATCH}results
            curl "https://api.test.com/v2/appid/${package}" -X GET -H "API-KEY: XxXxX-xXxXxXx" -H "Content-Type: application/json" --output ${BASE_PATCH}results/getappid.json

done 3<${BASE_PATCH}appIdId.json

这是可行的,但它会在每个循环中发出一个请求 - 这会花费很多时间(数小时)。 所以我的想法是并行进行。 1. 从列表中取出前 5 个 ID(在文件中) 2.开始下载这5个json文件 3.完成后取下5个id

也许有人知道如何做到这一点。 我想坚持使用 curl,现在我想下载一些东西,但可能很快我将需要使用 POST、PATCH 或 PUT(所以工具需要有这些选项)

最佳答案

使用 GNU Parallel 可能:

parallel -j 5 -a ${BASE_PATCH}appIdId.json curl "http://.../appid/{}" -X ....

您还可以添加 -X 以在每次调用 curl 时获取尽可能多的定义,从而避免创建 100k 个 curl 进程。

关于bash:在循环中 curl 并行请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36794400/

相关文章:

"Please wait a little bit"的 HTTP 响应代码

java - 使用 JAXRS 将 XML 编码为 Restful 服务的 JAVA 对象

c - eclipse C\Cpp 中 libcurl 的链接器问题

php - 使用 Curl 和 PHP 保持 session 活跃

用于检查进程是否正在运行并对结果采取行动的 Linux 脚本

linux - 在 Linux Bash 脚本中调用基于 ip 地址的函数

python - 练习 Linux Shell 脚本编写

git - 无法安装最新版本的Gitlab

android - 签名无效 - 提供的签名与来自 Android 的 WooCommerce REST API 调用不匹配

c++ - C++ 中的 Curl - 无法从 HTTPS 获取数据