将http请求从cURL转换为Node http.request

我在Node中遇到了一些基本的身份validation问题。

以下是我可以通过cURL作为subprocess:

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({ method: 'GET', url: url, auth: { username: username, password: password } }, function (err,res,body){ console.log(res.statusCode); }); 

任何想法我在这里做错了吗?

由于它是https,可以尝试添加值为443 port选项。

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

或者使用auth选项而不是header 。 参考: http : //nodejs.org/api/http.html#http_http_request_options_callback

 var req = https.request({ hostname: hostname, port: 443, path: path, auth: username + ':' + password }, function (res){ console.log(res.statusCode); }); req.end(); 

服务器正在等待一个用户代理。

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

做这个工作