【问题标题】:Getting invalid payload when trying to cURL slack尝试 cURL slack 时获取无效的有效负载
【发布时间】:2018-07-13 17:56:49
【问题描述】:

当 nginx 无法重新加载时,我正在尝试 cURL 松弛。我能够检查 nginx 是否失败,并且可以在它失败时卷曲松弛。尝试在我的 cURL 命令中包含来自失败重新加载的错误消息时,我遇到了无效的有效负载错误。这是我必须这样做的脚本:

#!/bin/bash

OUTPUT=$(nginx -s reload 2>&1 > /dev/null >/mnt/efs/out.txt)

ESCAPE=$(echo $OUTPUT | sed 's/"/\"/g' | sed "s/'/\'/g" )

nginx -t || curl -X POST --data-urlencode 'payload={"username": "reload-monitor-lizard", "text": "'"${ESCAPE}"'", "icon_emoji": ":ghost:"}' https://hooks.slack.com/services/xxxxxxx/xxxxx/xxxxxxxxxxxxxxxxxxxx

我尝试过使用引号,但它仍然给我无效的有效负载错误或发送

${ESCAPE}

作为消息。关于我做错了什么有什么建议吗?

更新:

通过用单引号替换变量中的双引号来解决此问题,如下所示:

ESCAPE=$(echo $OUTPUT | sed "s/\"/'/g" )

【问题讨论】:

    标签: bash curl nginx slack


    【解决方案1】:

    通过用单引号替换变量中的双引号来修复。像这样:

    ESCAPE=$(echo $OUTPUT | sed "s/\"/'/g" )
    

    【讨论】:

      【解决方案2】:

      这对我来说很好用:

      curl -X POST -H \"Content-type: application/json\" --data \"{\\\"text\\\":\\\"Here your text!!\\\"}\" <host_slack>
      

      【讨论】:

        【解决方案3】:

        您正在尝试将 www-form-urlencoded 数据发布到需要 JSON 的端点。

        除此之外,您的代码运行良好。

        【讨论】:

        • 我可以通过用单引号替换变量中的双引号来解决此问题:ESCAPE=$(echo $OUTPUT | sed "s/\"/'/g" ) 这与您所说的有关吗?在我看来,双引号导致特殊字符被发送到字符串之外。
        猜你喜欢
        • 2023-04-03
        • 2014-09-12
        • 2017-02-02
        • 2021-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多