こんな記事を書きましたが、結局渡す内容によってcurlが実行できないことがあったのでNode.jsで書き直しました。 依存パッケージなしで書いてみました。
ただ、プロキシ越えは未実装です。。。
#!/usr/bin/env node const hook_url = 'https://web/hooks/url'; const channel = 'channel-name'; const icon=':deciduous_tree:'; const getStdin = function(){ return new Promise((resolve, reject) => { process.stdin.setEncoding('utf8'); var input = []; process.stdin.on('readable', () => { const chunk = process.stdin.read(); if (chunk !== null) { input.push(chunk); } }); process.stdin.on('end', () => { process.stdout.write(`> sending data:\n${input.join('')}`); resolve(input.join('')); }); }); }; const postContent = function(url, data){ return new Promise((resolve, reject) => { const postData = require('querystring').stringify(data); const urllib = require('url'); const parsedUrl = urllib.parse(url); const options = { hostname: parsedUrl.host, port: url.startsWith('https') ? 443 : 80, path: parsedUrl.path, method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(postData) } }; const lib = url.startsWith('https') ? require('https') : require('http'); const req = lib.request(options, (res) => { // handle http errors if (res.statusCode < 200 || res.statusCode > 299) { reject(new Error('Failed to load page, status code: ' + res.statusCode)); } // console.log(`STATUS: ${res.statusCode}`); // console.log(`HEADERS: ${JSON.stringify(res.headers)}`); res.setEncoding('utf8'); const body = []; res.on('data', (chunk) => { // console.log(`BODY: ${chunk}`); body.push(chunk); }); res.on('end', () => { // console.log('No more data in response.'); resolve(body.join('')); }); }); req.on('error', (e) => { console.error(`problem with request: ${e.message}`); reject(e); }); // write data to request body req.write(postData); req.end(); }); }; getStdin().then(function(input){ const mes = input; const data = { payload: JSON.stringify({ icon_emoji: icon, text: '```' + mes + '```', channel: channel }) }; return postContent(hook_url, data); }) .then(function(out){ console.log('> done'); }) .catch(function(e){ console.log('error', e); });