【发布时间】:2016-07-16 11:23:30
【问题描述】:
我有一个 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_format\": \"text\", \"message\": \"$MESSAGE\" }" \
$SERVER/v2/room/$ROOM_ID/notification?auth_token=$AUTH_TOKEN &
但这没有任何效果。
我在这里错过了什么?
【问题讨论】:
-
URL 编码和 JSON 编码是两个不同的东西;不过,
curl不知道 JSON。