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

时间:2015-11-16 04:24:56

标签: curl slack-api slack

我试图将消息发布到Slack频道。 Slack提供了一个cURL命令的示例,但是逐字运行并不起作用。

提供的命令是:

public static class MyCellEditor extends AbstractCellEditor implements TableCellEditor {

    private JTextField editor;
    private UndoableEditHandler undoableEditHandler;

    public MyCellEditor(JTextField editor) {
        this.editor = editor;
        undoableEditHandler = new UndoableEditHandler(editor);
        editor.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                fireEditingStopped();
            }
        });
    }

    @Override
    public Object getCellEditorValue() {
        return editor.getText();
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        undoableEditHandler.setCanUndo(false);
        editor.setText(value == null ? null : value.toString());
        undoableEditHandler.setCanUndo(true);
        return editor;
    }

}

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

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

我认为它可能与Windows控制台如何处理单引号和双引号有关,但我一直无法让它工作。

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

有人能说出这里有什么问题吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

想出来。

我需要将包含整个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

我希望这能节省别人花在我身上的时间。

答案 2 :(得分:0)

我的报价很好。

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 param,如果没有它,它似乎不起作用。

目前正在使用cURL 7.29,并且工作正常。