我正在尝试通过更新收集器的信息来测试 Sumo Logic API。第二个 curl 命令是导致问题“curl:(55)发送 PUT 请求失败”的命令。它适用于我的终端,但不适用于 bash 脚本。
#!/bin/bash
readonly etag=$(curl -u '<accessId>:<accessKey>' -I -X GET https://api.sumologic.com/api/v1/collectors/<id> | grep -Fi etag | awk '{print $2}' | tr -d \''"\')
echo ${etag}
curl -vvv -u '<accessId>:<accessKey>' -X PUT -H "Content-Type: application/json" -H "If-Match: \"${etag}\"" -T updated_collector.json https://api.sumologic.com/api/v1/collectors/<id>
set -x
第一个 curl 命令分配给名为“etag”的变量,该变量存储必要的 etag。etag 在第二个 curl 命令中用于请求更新存储在“updated_collector.json”中的信息。updated_collector.json 文件不是问题,因为我已经通过终端成功更新了信息。我怀疑没有在标头中发送内容类型,因为有人在他们的末尾运行了脚本,并且它没有显示带有 -vvv 标记的信息。
在这里您可以找到 Sumo Logic Collector API 方法和示例,我从中获得了 curl 命令来测试 API:https ://help.sumologic.com/APIs/Collector-Management-API/Collector-API-Methods-and-例子
更新:我重新获取了 etag,然后在 bash 脚本中运行了第二个命令。我手动将 etag 插入到第二个 curl 命令的 ${etag} 部分。然后我运行了脚本,它工作了。因此,第二个 curl 命令中的 etag 变量格式不正确。我不知道如何解决这个问题。