批量curl请求w/https地址txt文件

批量curl请求w/https地址txt文件

我有多部手机,我正在尝试获取手机的正常运行时间。我已为所有手机启用 REST API,并希望运行 CURL 脚本来获取正常运行时间的价值。我有一个脚本可以获取 Polycom 手机的价值。以下命令有效,但我想使用 3000 多个设备执行此操作。当我运行包含 100 个命令的脚本时,我得到了输出,但它们都混杂在一起。我有一个 txt 和 excel 文件,其中包含所有电话的 IP 地址,所有 3000 台设备的用户名和密码都相同。我正在寻找一种方法来运行所有命令,然后获取带有 IPADDRESS 的文本文件并返回请求结果( IPADRESS:"Status": "2000"" 或类似的内容)。我主要想要一种简单的方法来查看每个 IP 地址的每条curl 行的结果。

命令

curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" -H "Content-Type: application/json" -k https://USERNAME:PASSWORD@IPADDRESS/api/v1/mgmt/config/get

输出

{“Status”: “2000”, “data”: {"UpTimeSinceLastReboot": "<DAYS_HOURS_MINUTES_SECONDS>"}

我能够添加 >> /tmp/filename.txt 以输出包含所有响应的 txt 文件,但无法准确地将其与手机的 IP 地址进行匹配。

答案1

在所有示例中,我假设该文件每行一个 IP。

1.卷曲与魔法

您可以通过以下方式实现您的目标curl(1)和周围的一些魔法

curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" \
  -H "Content-Type: application/json" \
  -k \
  -u USERNAME:PASSWORD \
  -w ",%{remote_ip}\t" \
  <(sed 's#^#https://#;s#$#/api/v1/mgmt/config/get#' /path/to/file) \
  | tr -ds '\n\t' '\t\n'

为了更好地理解,我将命令分成多行:

  • 我将凭据从 URL 移至curl 参数
  • 密钥是从子shell输入的,为ip加上协议前缀https://并附加路径/api/v1/mgmt/config/get
  • -w 选项写入远程IP回应后。稍后在 tr 中使用该格式,REMOTE_IP<TAB>来创建所需的格式
  • 通过管道将其通过tr(1)删除响应末尾可能的换行符并在末尾创建换行符(这不太好,但应该可以工作)。

注意:本例中的结果是

RESPONSE,IP

2.for循环

for ip in $(cat /path/to/file)
do
  echo -ne "$ip\t"
  curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" -H "Content-Type: application/json" -k https://USERNAME:PASSWORD@$ip/api/v1/mgmt/config/get
done

结果:

IP,RESPONSE

3. while 循环

while 循环

while read ip
do
  echo -ne "$ip\t"
  curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" -H "Content-Type: application/json" -k https://USERNAME:PASSWORD@$ip/api/v1/mgmt/config/get
done < /path/to/file

结果:

IP,RESPONSE

相关内容