javascript - NodeJS - Hvordan downloader man en fil via Request?
Jeg har en ExternalServe (kører på Localhost), når jeg bruger browseren til at anmode:
localhost:2013/ExternalServer/getfilebyname?filename=getStatus.json
Så browseren downloadede getStatus.json til mappen Overførsler.
I mit NodeJS-projekt vil jeg downloade getStatus.json-fil, og jeg lavede:
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();
men når jeg kører: node download.js returnerer systemet
<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>
Hvordan fikser man det?
Med venlig hilsen
Svar #1
Du får følgende fejlrespons:
Denne forespørgsel kræver HTTP-godkendelse
Foreslår at tilføje autorisationsoplysningerne i headeren. For eksempel:
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);
});
i tilfælde af proxy kan du bruge følgende header i stedet:
Proxy-Authorization
Svar #2
Serveren vil have et brugernavn og en adgangskode, eller kræver en anden autorisationsmekanisme, før den tillader dig at få adgang til filen på denne måde.
For at se, hvordan man angiver et brugernavn og kodeord, når man laver forespørgslen i node.js, se Hvordan man bruger http.client i Node.js, hvis der er grundlæggende autorisation
Hvordan ved vi, at dette kunne være problemet?
To interessante strenge i systemet returnerer:
HTTP Status 401og
This request requires HTTP authenticationFra Wikipedia: Liste over HTTP-statuskoder
401 Uautoriseret Lignende 403 Forbudt, men specifikt til brug, når autentificering er påkrævet og har fejlet eller endnu ikke er blevet leveret.[2] Svar skal inkludere et WWW-Authenticate header-felt, der indeholder en udfordring, der gælder for den anmodede ressource. Se Grundlæggende adgangsautentificering og Digest adgangsautentificering.
En anden mulighed er, at en server kunne sættes op til at sende 401 i stedet for 403, men ikke rigtig accepterer nogen brugernavne eller adgangskoder.
