2013-08-18 76 views
6

我有一個ExternalServe當我使用瀏覽器請求(在本地主機上運行的) :NodeJS - 如何通過請求下載文件?

本地主機:2013/ExternalServer/getfilebyname文件名= 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(); 

但是當我運行:節點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> 

如何解決?

最佳方面

回答

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 
+0

如果我的帳號和密碼都是「雄貓」,然後「授權」:「基本的'+新的緩衝區(「tomcat」+':'+「tomcat).toString('base64')? – alongquan

+0

是的...似乎工作正確? –

+0

Thansk U非常,成功...:D – alongquan

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擅自403類似禁止,但專爲使用 當需要驗證並且失敗或尚未提供時 。[2]該響應必須包含一個WWW-Authenticate標頭字段 ,其中包含適用於所請求資源的挑戰。請參閱基本的 接入認證和摘要接入認證。

另一種可能性是服務器可能被設置爲發出401而不是403,但並不真正接受任何用戶名或密碼。

+0

非常感謝你 – alongquan