将http请求从cURL转换为节点http.request

时间:2014-02-25 17:43:23

标签: node.js curl

我在Node中使用基本身份验证时遇到了一些麻烦。

以下是我如何通过cURL作为子进程来实现的:

var auth = 'Basic ' + new Buffer(username + ":" + password).toString('base64');
var url =  'https://' + hostname + path;

var curlstr = "curl #{url} -H 'Authorization: #{auth}'"
  .replace('#{url}', url)
  .replace('#{auth}', auth);

require('child_process').exec(curlstr, function (err, stdout, stderr){
  console.log(stdout);
});

但是当我尝试https.request时它会返回403s:

var req = https.request({
  hostname: hostname,
  path: path,
  headers: {'Authorization': auth}
}, function (res){
  console.log(res.statusCode);
});

req.end();

我使用request得到了相同的结果:

request({
  method: 'GET',
  url: url,
  auth: {
    username: username,
    password: password
  }
}, function (err,res,body){
  console.log(res.statusCode);
});

我在这里做错了什么想法?

2 个答案:

答案 0 :(得分:1)

由于它是https,因此可以尝试添加值port的{​​{1}}选项。

443

或使用var req = https.request({ hostname: hostname, port: 443, path: path, headers: {'Authorization': auth} }, function (res){ console.log(res.statusCode); }); req.end(); 选项代替auth。 参考:http://nodejs.org/api/http.html#http_http_request_options_callback

header

答案 1 :(得分:1)

服务器期待用户代理。

request({
  method: 'GET',
  url: url,
  headers: {'User-Agent': 'curl'},
  auth: {
    username: username,
    password: password
  }
}, function (err,res,body){
  console.log(body);
});

这份工作。