我有一个ExternalServe(在Localhost上运行) 当我使用浏览器请求时:
本地主机:2013 / ExternalServer / getfilebyname文件名= getStatus.json
然后浏览器将getStatus.json下载到Download Folder。
在我的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>
如何解决?
最好的关注
答案 0 :(得分:6)
您收到以下错误回复:
此请求需要HTTP身份验证
建议在标头中添加授权信息。像:
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
答案 1 :(得分:0)
服务器需要用户名和密码,或者需要其他授权机制才能让您以这种方式访问文件。
要了解在node.js中发出请求时如何提供用户和密码,请查看How to use http.client in Node.js if there is basic authorization
我们怎么知道这可能是问题?
系统中有两个有趣的字符串返回:
HTTP Status 401
和
This request requires HTTP authentication
来自Wikipedia: List of HTTP Status Codes
401 Unauthorized类似于403 Forbidden,但专门用于 当需要身份验证并且已经失败或尚未验证时 提供的。[2]响应必须包含WWW-Authenticate标头字段 包含适用于所请求资源的挑战。见基本 访问身份验证和摘要访问身份验证。
另一种可能性是服务器可以设置为发出401而不是403,但实际上并不接受任何用户名或密码。