Slack предоставил команду cURL, которая не работает для публикации встроенного json

Я пытаюсь опубликовать сообщение на канале 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

Я установил последнюю версию 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,

и т.п.

Я думал, что это может быть что-то о том, как консоль Windows справляется с одинарными и двойными кавычками, но мне не удалось заставить ее работать.

Я обнаружил, что если я заменю строку json файлом [email protected], то это сработает, но мне действительно нужно, чтобы json был динамическим.

Кто-нибудь может подсказать, что здесь не так?


person chrismay    schedule 16.11.2015    source источник


Ответы (3)


Все кавычки, обрабатываемые cmd.exe, заключаются в двойные кавычки, за исключением того, что команда для запуска заключена в инструкцию FOR /F. Таким образом, ваша команда cURL, работающая в Windows, должна выглядеть так:

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
person JieTing Xu    schedule 17.11.2016
comment
Работает и на powershell, проверено. - person Christopher J.; 20.12.2016

Догадаться.

Мне нужно было изменить одинарные кавычки, обертывающие всю строку 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

Я надеюсь, что это сэкономит кому-то еще время, которое я потратил на это.

person chrismay    schedule 16.11.2015

У меня нормально работает с цитированием.

curl -X POST --data-urlencode 'payload={"channel": "#general", "username": "webhook", "text": "Some message.", "icon_emoji": ":ghost:"}' https://hooks.slack.com/services/BLAHBLAH/BLAHBLAHBLAH/BLAHBLAHBLAHBLAH

Однако при попытке использовать его с cURL 7.15 больше не работает, возможно, потому, что параметр --data-urlencode не поддерживается в этой версии, и, похоже, без него он не работает.

В настоящее время использую его с cURL 7.29, и он работает нормально.

person Yahir Cano    schedule 22.09.2016