javascript - NodeJS - Hvordan laste ned fil via Request?


Jeg har en ExternalServe (kjører på Localhost) Når jeg bruker nettleseren til å gjøre en forespørsel:

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

Da nettleseren lastet ned getStatus.json til Nedlastinger-mappen.

I mitt NodeJS-prosjekt vil jeg laste ned getStatus.json-fil, og jeg laget:

last-ned.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 kjø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 fikse det?

Beste hilsen

Svar #1

Du får følgende feilmelding:

Denne forespørselen krever HTTP-autentisering

Foreslår å legge til autorisasjonsinformasjonen i header. Som:

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 tilfelle proxy, kan du bruke følgende header i stedet:

Proxy-Authorization

Svar #2

Serveren vil ha et brukernavn og passord, eller krever en annen autorisasjonsmekanisme, før den lar deg få tilgang til filen på denne måten.

For å se hvordan man oppgir brukernavn og passord når man sender forespørselen i node.js, se Hvordan bruke http.client i Node.js hvis det er grunnleggende godkjenning

Hvordan vet vi at dette kan være problemet?

To interessante strenger i systemet returnerer:

HTTP Status 401

og

This request requires HTTP authentication

Fra Wikipedia: Liste over HTTP-statuskoder

401 Uautorisert Lignende 403 Forbudt, men spesifikt for bruk når autentisering kreves og har mislyktes eller ennå ikke er gitt. Svaret må inkludere et WWW-Authenticate header-felt som inneholder en utfordring som gjelder ressursen som forespørres. Se Grunnleggende tilgangsautentisering og Digest tilgangsautentisering.

En annen mulighet er at en server kan settes opp til å sende ut 401 i stedet for 403, men egentlig ikke godtar noen brukernavn eller passord.