Shell 脚本中的 Curl 可能在标题部分失败

Posted

技术标签:

【中文标题】Shell 脚本中的 Curl 可能在标题部分失败【英文标题】:Curl in Shell Script Potentially Failing in Headers Section 【发布时间】:2022-01-08 12:25:35 【问题描述】:

我正在尝试运行一个脚本,该脚本将获取 bitwarden 中的用户列表并将其输出到名为 bitmembers 的文件中。

下面是XXXX 是我的 API 持有者令牌的脚本

#!/bin/bash

CURL="/usr/bin/curl"
BITHTTP="https://api.bitwarden.com/public/members"
CURLARGS="-X GET"

header='-H "accept: text/plain" -H "Authorization: Bearer XXXX"'

$CURL $CURLARGS $BITHTTP $header > /tmp/bitmembers

以下是我在运行脚本时遇到的错误:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: text
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: Bearer
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: XXXX

以下是 curl 命令和确认的作品:

curl -X GET "https://api.bitwarden.com/public/members" -H  "accept: text/plain" -H  "Authorization: Bearer XXXX"

看起来它在标题部分发生了故障。你能指出我遗漏了什么吗?

【问题讨论】:

BITHTTP='"api.bitwarden.com/public/members"' 您可以尝试在包括双引号的 url 中添加单引号吗? 我尝试按照您的建议添加单引号,除了上面的错误之外,现在它显示curl: (3) URL using bad/illegal format or missing URL 看起来像 header 和 get 之类的 curl 选项需要在单独的变量中 【参考方案1】:

我认为问题在于未在单独的变量中设置 curl 选项,因此以下内容应该可以解决错误:

#!/bin/bash

CURL="/usr/bin/curl"
CURLARGS="-X GET"
BITHTTP="https://api.bitwarden.com/public/members"
header="-H"
accept="accept:text/plain"
auth="Authorization:Bearer XXXX"

$CURL $CURLARGS $BITHTTP $header "$accept" $header "$auth" > /tmp/bitmembers

This 答案似乎是将变量作为选项发送到主 curl 命令的好方法。示例:

CURL_OPTIONS=( -X GET "$BITHTTP" -H "$accept" -H "$auth" )
$CURL "$CURL_OPTIONS[@]"

【讨论】:

啊甜蜜!那行得通。谢谢! 太棒了!我很高兴它对你有用:)

以上是关于Shell 脚本中的 Curl 可能在标题部分失败的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本:监控HTTP服务的状态(测试返回码)

Shell脚本curl在stderr上输出进度[重复]

如果任何命令失败,则在最后以非零代码退出 shell 脚本

shell脚本:监控HTTP服务的状态(测试返回码)

简单介绍shell中的curl网络请求的实现

在 Unix shell 脚本中以可读的 JSON 格式显示 curl 输出