无法使用 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
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