child_process.exec
を使用して、curlをlongコマンドで呼び出して、データをAPIに送信しようとしました。以下の例のような何か:child_process.execのcurlコマンドに変数を渡すのに失敗しました
exec('git log --oneline | wc -l', function(error, stdin, stderr) {
if (stdin > 1) {
exec('curl -H "Content-Type: application/json" -X POST -d \'{"value1": "\'"$arg"\'"}\' https://https://maker.ifttt.com/trigger/{event}/with/key/<my-key>', { "env" : {"arg": stdin } });
}
})
ので、gitのレポは、そのgit log
出力に複数の行が含まれ、その後、あなたは(ここでは、ifttt.comでシンプルなウェブフック)いくつかのAPIにPOSTリクエストを実行した場合、プロセスで変数(arg
)を渡しています。
これは最善の試みですが、一般的に、私は一重引用符と二重引用符をエスケープするのにかなり苦労していました。ボディは改行が含まれているため、この特定のケースでは、HTTPリクエストが正しく送信されませんでした。
POST/HTTP/1.1
Host: <some-host>
User-Agent: curl/7.50.1
Accept: */*
Content-Type: application/json
Content-Length: 16
{"value1": "2
"}
終わりに、私は外部のbashスクリプトを使用する必要がありました:
exec('./send_request.sh $arg', { "env": {"arg": stdin } });
を私は」同じjs
ファイル内でそれを動作させる方法についてはまだ非常に興味があります。
もし私が助けてくれれば、私はノード6.11.0とカール7.52.1を実行しています。
'exec'の代わりに' spawn'を使うことができます。 'spawn'はargsを配列として受け取ります。したがって、文字列の連結は必要ありません。 –
興味深い。はい、それを行うより良い方法のように聞こえます。あなたはそれを使用する方法の例を投稿できますか? –
私はそれを動作させることができました。これは良い改善です: 'spawn( 'curl'、['-H" Content-Type:application/json "'、 '-X POST'、 '-d \" {"value1": "\" "$ arg" \ '"} \"'、]、...「ありがとう! –