NodeJS - 如何使用Request下载文件?

6

我有一个运行在本地主机上的ExternalServer。

当我使用浏览器请求时:

localhost:2013/ExternalServer/getfilebyname?filename=getStatus.json

然后浏览器将getStatus.json下载到下载文件夹中。

在我的NodeJS项目中,我想要下载getStatus.json文件,我创建了:

download.js

var http = require('http');
var fs = require('fs');

function getFile (){

  var file = fs.createWriteStream("./../lib/user.json");
  var req = http.get("http://localhost:2013/ExternalServer/getfilebyname?filename=getStatus.json", function(res) {
    res.pipe(file);
});
}

getFile();

但当我运行:node download.js时,系统返回:
<html><head><title>Apache Tomcat/8.0.0-RC1 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 401 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>This request requires HTTP authentication.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/8.0.0-RC1</h3></body></html>

如何解决这个问题?

最好的问候

2个回答

7
您得到了以下错误响应:

此请求需要HTTP身份验证

建议在标题中添加Authorization信息。例如:
var options = {
    host: 'localhost',
    port: 2013,
    path: '/ExternalServer/getfilebyname?filename=getStatus.json',
    headers: {
     'Authorization': 'Basic ' + new Buffer(uname + ':' + pword).toString('base64')
   }         
};

request = http.get(options, function(res) {
   res.pipe(file);
});

如果使用代理,您可以使用以下标头:

Proxy-Authorization

如果我的账户和密码都是“tomcat”,那么 'Authorization': 'Basic ' + new Buffer("tomcat" + ':' + "tomcat).toString('base64') 是什么意思? - alongquan
非常感谢,成功了... :D - alongquan
成功了,但是:保存后,系统返回一个名为 [object Object] 的文件到根目录... 我无法修复它... - alongquan

0

服务器要求用户名和密码,或者需要另一种授权机制,在允许您以这种方式访问文件之前。

要了解如何在node.js中发出请求时提供用户和密码,请参考如何在Node.js中使用http.client进行基本授权

我们怎么知道这可能是问题所在呢?

系统返回的两个有趣的字符串是:

HTTP状态码401

此请求需要HTTP身份验证

来自维基百科:HTTP状态码列表

401未经授权 类似于403禁止访问,但专门用于在需要且已失败或尚未提供身份验证的情况下。响应必须包括一个包含适用于所请求资源的挑战的WWW-Authenticate头字段。请参阅基本访问身份验证和摘要访问身份验证。

另一种可能性是服务器可能被设置为发出401而不是403,但实际上不接受任何用户名或密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接