加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash脚本:在curl JSON Post数据中使用字符串变量

发布时间:2020-12-16 01:28:54 所属栏目:安全 来源:网络整理
导读:我想发送一个json请求,并在post数据中嵌入一个变量. 我做了一些研究,我提出了变量周围的单引号. #!/bin/bash FILENAME="/media/file.avi" curl -i -X POST -H "Content-Type: application/json" —d '{"jsonrpc": "2.0","method": "Player.Open","params":{"
我想发送一个json请求,并在post数据中嵌入一个变量.
我做了一些研究,我提出了变量周围的单引号.
#!/bin/bash
    FILENAME="/media/file.avi"
    curl -i -X POST -H "Content-Type: application/json" —d '{"jsonrpc": "2.0","method": "Player.Open","params":{"item":{"file":"'$FILENAME'"}}}' http://192.167.0.13/jsonrpc

不幸的是我收到一些错误:

curl: (6) Couldn't resolve host '—d'
curl: (3) [globbing] nested braces not supported at pos 54
HTTP/1.1 200 OK
Content-Length: 76
Content-Type: application/json
Date: Wed,29 Jan 2014 19:16:56 GMT

{"error":{"code":-32700,"message":"Parse error."},"id":null,"jsonrpc":"2.0"}

显然,大括号和http答复状态有一些问题,该命令无法执行.我的代码在这里有什么问题?
谢谢!

这是我的卷曲版本:

curl 7.30.0 (mips-unknown-linux-gnu) libcurl/7.30.0 OpenSSL/0.9.8y
Protocols: file ftp ftps http https imap imaps pop3 pop3s rtsp smtp smtps tftp 
Features: IPv6 Largefile NTLM NTLM_WB SSL
更新:使用更简单
request_body=$(cat <<EOF
{
  "jsonrpc": "2.0","params": {
    "item": {
      "file": "$FILENAME"
    }
  }
}
EOF
)

而不是我在下面解释的.但是,如果它是一个选项,请使用jq生成JSON.这样可以确保$FILENAME的值被正确引用.

request_body=$(jq -n --arg fname "$FILENAME" '
{
  jsonrpc: "2.0",method: "Player.Open",params: {item: {file: $fname}}
}'

使用请求体内容首先定义一个变量会变得更简单:

#!/bin/bash
header="Content-Type: application/json"
FILENAME="/media/file.avi"
request_body=$(< <(cat <<EOF
{
  "jsonrpc": "2.0","params": {
    "item": {
      "file": "$FILENAME"
    }
  }
}
EOF
))
curl -i -X POST -H "$header" -d "$request_body" http://192.167.0.13/jsonrpc

这个定义可能需要解释才能理解,但要注意两大优点:

>你消除一个引用的水平
>您可以轻松地格式化文本的可读性.

首先,你有一个从文件读取的简单的命令替换:

$( < ... )   # bash improvement over $( cat ... )

而不是文件名,您可以指定一个进程替换,其中使用命令的输出,就像它是文件的正文一样.

进程替换中的命令是简单的cat,它从这里读取文档.这是包含您的请求正文的这个文档.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读