1

我正在尝试通过更新收集器的信息来测试 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 变量格式不正确。我不知道如何解决这个问题。

4

1 回答 1

0

问题部分出在语法上,但在修复它之后,我仍然遇到错误。"If-Match: \"${etag}\"在我的命令中应该是"If-Match: ${etag}"。我必须添加 --http1.1 标志才能使其工作。我确定这是一个相扑逻辑问题。我能够使用 http2.0 执行 GET 请求没有问题。

于 2021-06-30T19:34:56.683 回答