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

bash – 如何发布带有需要转义字符的curl的json字符串?

发布时间:2020-12-16 01:31:40 所属栏目:安全 来源:网络整理
导读:我有一个 shell脚本,我一直用来发布到hipchat频道的东西.它工作正常,直到我尝试发送一个包含需要转义的字符的消息.我像这样运行命令(注意那里的额外反斜杠导致问题) /usr/local/bin/hipchatmsg.sh "my great message here " red 我的bash脚本(hipchatmsg.s
我有一个 shell脚本,我一直用来发布到hipchat频道的东西.它工作正常,直到我尝试发送一个包含需要转义的字符的消息.我像这样运行命令(注意那里的额外反斜杠导致问题)
/usr/local/bin/hipchatmsg.sh "my great message here  " red

我的bash脚本(hipchatmsg.sh)中的代码重要的是:

# Make sure message is passed
if [ -z ${1+x} ]; then
    echo "Provide a message to create the new notification"
    exit 1
else
    MESSAGE=$1
fi

// send locally via curl
/usr/bin/curl -H "Content-Type: application/json" 
   -X POST 
   -k 
   -d "{"color": "$COLOR","message_format": "text","message": "$MESSAGE" }" 
$SERVER/v2/room/$ROOM_ID/notification?auth_token=$AUTH_TOKEN &

// $server and $room are defined earlier

exit 0

如果我尝试使用任何需要转义的字符运行上面的命令,我将得到如下错误:

{
    "error": {
    "code": 400,"message": "The request body cannot be parsed as valid JSON: Invalid X escape sequence u'\': line 1 column 125 (char 124)","type": "Bad Request"
    }
}

我在这里找到了类似的东西,最好的建议是尝试使用–data-urlencode发送curl帖子,所以我试着这样:

/usr/bin/curl -H "Content-Type: application/json" 
   -X POST  
   -k 
   -d --data-urlencode "{"color": "$COLOR","message": "$MESSAGE" }" 
$SERVER/v2/room/$ROOM_ID/notification?auth_token=$AUTH_TOKEN &

但这没有效果.

我在这里错过了什么?

最简单的方法是使用像 jq这样的程序来生成JSON;它会照顾逃避需要逃脱的东西.
jq -n --arg color "$COLOR" 
      --arg message "$MESSAGE" 
   '{color: $color,message_format: "text",message: $message}' |
 /usr/bin/curl -H "Content-Type: application/json" 
   -X POST 
   -k 
   -d@- 
   $SERVER/v2/room/$ROOM_ID/notification?auth_token=$AUTH_TOKEN &

参数@ – to -d告诉curl从标准输入读取,标准输入是通过管道从jq提供的. jq的–arg选项将可用的JSON编码字符串提供给过滤器,这只是一个JSON对象表达式.

(编辑:李大同)

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

    推荐文章
      热点阅读