Reputation: 151
I have a ExternalServe (running on Localhost) When I using Browser to request:
localhost:2013/ExternalServer/getfilebyname?filename=getStatus.json
Then browser downloaded getStatus.json to Download Folder.
In my NodeJS project, I want to download getStatus.json file and I made:
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();
but when i run: node download.js the system return
<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>
How to fix it?
Best regard
Upvotes: 6
Views: 23070
Reputation: 4029
You are getting the following error response:
This request requires HTTP authentication
Suggesting to add the Authorization information in header. Like:
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);
});
in case of proxy, you can use the following header instead:
Proxy-Authorization
Upvotes: 7
Reputation: 27483
The server wants a username and password, or requires another authorization mechanism, before it will let you access the file this way.
To see how to supply a user and password when making the request in node.js, look at How to use http.client in Node.js if there is basic authorization
How do we know this could be the problem?
Two interesting strings in the system return:
HTTP Status 401
and
This request requires HTTP authentication
From Wikipedia: List of HTTP Status Codes
401 Unauthorized Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet been provided.[2] The response must include a WWW-Authenticate header field containing a challenge applicable to the requested resource. See Basic access authentication and Digest access authentication.
Another possibility is that a server could be set up to emit 401 instead of 403, but doesn't really accept any usernames or passwords.
Upvotes: 0