【问题标题】:Curl with NodeJS使用 NodeJS 卷曲
【发布时间】:2017-03-05 20:25:16
【问题描述】:

我正在使用以下代码通过 Curl 和 Node.JS 执行一个 rest API。它正在我的本地机器上运行。

...
...
var child_process = require('child_process');

    function runCmd(cmd)
    {
        var resp = child_process.execSync(cmd);
        var result = resp.toString('UTF8');
        return result;
    }

    var cmd = "curl -u userx:passx -X POST --data @test.json -H 'Content-Type: application/json' https://mysite.atlassian.net/rest/api/2/issue/";
    var result = runCmd(cmd);
...
...

但上传到服务器后,我收到以下错误

/home/ubuntu/PMPBuild/jiraIssue.js:76
                var resp = child_process.execSync(cmd);
                                         ^
TypeError: Object function (command /*, options, callback */) {
  var file, args, options, callback;

【问题讨论】:

  • 你运行的是什么版本的节点?我运行了这个确切的脚本,只有 URL 并得到了响应
  • 我可以告诉你如何使用 node-curl 库,如果你不能让它工作,请告诉我
  • 我使用的是v0.12.10版本
  • node.js v0.12.10 已经过时了。您应该运行 4.x 或 6.x(最好是 6.x)..
  • @NextLocal 请教我如何使用 node-curl

标签: javascript node.js curl


【解决方案1】:

request 的简单示例

var request = require('request');
request('http://www.httpbin.org', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
    }
})

node-libcurl使用示例

var Curl = require('node-libcurl').Curl;
var curl = new Curl();
curl.setOpt( Curl.option.URL, 'http://www.httpbin.org');
curl.setOpt( Curl.option.FOLLOWLOCATION, true );
curl.setOpt( Curl.option.HTTPPOST, [
    { name: 'login', contents: 'username' }
]);
curl.perform();

【讨论】:

    【解决方案2】:

    您的服务器不支持 CURL。如果你使用请求库会更好https://github.com/request/request

    var request = require('request');
    var jsonData;
    
    fs = require('fs')
    fs.readFile('test.json', 'utf8', function (err,data) {
      if (err) {
        return console.log(err);
      }
      jsonData = JSON.parse(data);
    });
    
    request({
        url: 'https://mysite.atlassian.net/rest/api/2/issue/',
        'auth': {
         'user': 'userx',
         'pass': 'passx',
         'sendImmediately': false
        },
        qs: jsonData,
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        }
    }, function(error, response, body){
        if(error) {
            console.log(error);
        } else {
            console.log(response.statusCode, body);
        }
    });
    

    【讨论】:

    • 我使用请求。太棒了
    • OP 正在使用 CURL 进行 POST,其中包含带有用户名和密码的 JSON 数据。您的回答并未说明如何使用问题的有效部分 request() 库来完成所有这些工作。
    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多