无法使用 webhook 将 curl 输出发送到 discord,否则会在我的 bash 终端中打印它

Unable to send curl output to discord using webhook which is otherwise printing it in my bash terminal

status=$(curl -i -s -H "Authorization: token abc123" https://www.some_url.com | awk 'NR==18')

if [ "$status" != 200 ]; then
  echo "$status"
fi

以上代码有效,echo 正在我的控制台中打印输出。

但是当我使用 discord webhook 时,它不会向那里发送消息并抛出以下错误:{"code": 50109, "message": "The request body contains invalid JSON."}

webhook=https://discord.com/api/webhooks/abc123

status=$(curl -i -s -H "Authorization: token abc123" https://www.some_url.com | awk 'NR==18')

if [ "$status" != 200 ]; then
  curl -H "Content-Type: application/json" -X POST -d '{"content":"'"$status"'"}' $webhook
fi

我可以通过 webhook 发送普通消息,但不能通过此 curl 输出。输出应该是 HTML 错误消息。

即使我将 awk 'NR==18' 更改为 awk 'NR==1',它甚至不会发送一行输出应该是这样的:HTTP/1.1 401 Unauthorized

我在 bash 脚本的 raspberry pi 上有一个 discord 机器人(webhook)运行,所以我认为这与您正在寻找的东西相同

sendcontent='{"username": "Botname", "content": "'"${messagearray[@]}"'"}'
curl -H "Content-Type: application/json" -d "$sendcontent" "$webhookurl"

我建议对您的代码进行以下更改:

messagearray=($(curl -i -s -H "Authorization: token abc123" https://www.some_url.com | awk 'NR==18'))

编辑: 似乎curl+awk命令return中有讨厌的不可见字符,因此需要将上面的解决方案修改如下 (此 bash 文件测试提供的 url 来自评论)

#!/bin/bash
webhookurl="https://mywebhook"
messagearray=($(curl -i -s https://www.google.com/ | awk 'NR==1'))
#this next line removes nasty characters that give json errors (keeps only letters, numbers SPACE and -)
message=`echo ${messagearray[@]} | sed 's/[^0-9A-Za-z -]*//g'`;
sendcontent='{"username": "Botname", "content": "'"$message"'"}'
curl -H "Content-Type: application/json" -d "$sendcontent" "$webhookurl"

这在 discord

中成功发送 HTTP/2 200

删除是对以下内容的改编: How to remove a newline from a string in Bash