我使用curl
将JSON发送到API端点。然而,在bash链的某个地方,它变得搞砸了。
使用curl
进行编码有什么特别的了解吗?
如果我像这样构建有效载荷:
PAYLOAD='payload={"channel": "github", "username": "webhookbot", "icon_emoji": ":ghost:", "text": "'
PAYLOAD+=$1
PAYLOAD+=' " }'
echo $PAYLOAD
curl -X POST --data-urlencode "$PAYLOAD" $SLACKPOSTURL
echo "sent"
我会收到错误
Payload无效JSONsent
然而,如果我只是通过输出
来硬件分配变量PAYLOAD='payload={"channel": "github", "username": "webhookbot", "icon_emoji": ":ghost:", "text": "LAST_COMMIT Merge pull request #558 from dcsan/boteditor Boteditor " }'
那么它会很好。
是否存在一些简单的赋值与串联字符串不同的东西?在控制台中,输出看起来完全相同。
FWIW有些消息可以通过,但内容如下:
LAST_COMMIT来自dcsan / boteditor Boteditor的合并拉取请求#558
只会在硬编码的情况下通过。所以它不是另一端afaican看到的,它与消息的构建方式有关。
答案 0 :(得分:5)
我想你想要将值连接到你的变量中。但+=
不是这样做的方式。
要在变量中连接字符串,您需要说:
PAYLOAD="$PAYLOAD $1"
所有这些都将如下所示。请注意,需要使用"
以便扩展变量$PAYLOAD
并使用\"
来存储文字双引号:
PAYLOAD='payload={"channel": "github", "username": "webhookbot", "icon_emoji": ":ghost:", "text": "'
PAYLOAD="$PAYLOAD $1 \" }"
echo "$PAYLOAD"
curl -X POST --data-urlencode "$PAYLOAD" $SLACKPOSTURL
echo "sent"
答案 1 :(得分:4)
这是我在bash脚本中的作用:
curl -X POST --data-urlencode "payload={\"text\": \"$2\"}" https://hooks.slack.com/services/$KEY
请注意内部引号已转义,但外部引号不是。
仅供参考,补充说:
set -x
在bash脚本开头的将显示正在执行的实际命令,并节省大量的猜测。