Slack提供的cURL命令无法发布内联json

chr*_*may 5 curl slack-api slack

我正在尝试将消息发布到Slack通道.Slack提供了一个cURL命令的示例,但是逐字运行不起作用.

提供的命令是:

curl -X POST --data-urlencode 'payload={"channel": "#deployment", "username": "webhookbot", "text": "This is posted to #deployment and comes from a bot named webhookbot.", "icon_emoji": ":ghost:"}' https://hooks.slack.com/services/SomeCode/OtherCode/3rdCode
Run Code Online (Sandbox Code Playgroud)

我在我的机器上安装了最新的cURL(运行Windows 8.1),当运行上面的脚本时,我得到:

curl: (6) Could not resolve host: #deployment,
curl: (6) Could not resolve host: username
curl: (6) Could not resolve host: webhookbot,
Run Code Online (Sandbox Code Playgroud)

等等

我认为它可能是关于Windows控制台如何处理单引号和双引号的问题,但我一直无法让它工作.

我发现如果我用一个文件cache@filename.txt替换json字符串然后它可以工作,但我真的需要json是动态的.

有人能说出这里有什么不对吗?

小智 9

cmd.exe处理的所有引用都是用双引号完成的,除非将命令括起来在FOR/F语句中运行.因此,在Windows上运行的cURL命令应如下所示:

curl -X POST --data-urlencode "payload={'channel': '#deployment', 'username': 'webhookbot', 'text': 'This is posted to #deployment', 'icon_emoji': ':ghost:'}" https://hooks.slack.com/services/Code1/Code2/Code3
Run Code Online (Sandbox Code Playgroud)


chr*_*may 5

弄清楚了。

我需要将包裹整个 JSON 字符串的单引号更改为双引号,然后在此上下文中转义单引号的方法不是 \" 或 ^" 而是 ""。

所以这有效:

curl -X POST --data-urlencode "payload={""channel"": ""#deployment"", ""username"": ""webhookbot"", ""text"": ""This is posted to #deployment"", ""icon_emoji"": "":ghost:""}" https://hooks.slack.com/services/Code1/Code2/Code3
Run Code Online (Sandbox Code Playgroud)

我希望这可以节省我花在它上面的时间。