2013-08-18 47 views
6

Tôi có một ExternalServe (chạy trên Localhost) Khi tôi sử dụng trình duyệt yêu cầu:NodeJS - Cách tải tệp xuống qua Yêu cầu?

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

Sau đó trình duyệt tải getStatus.json để tải xuống thư mục.

Trong dự án NodeJS của tôi, tôi muốn tải về tập tin getStatus.json và tôi đã thực hiện:

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(); 

nhưng khi tôi chạy: nút download.js sự trở lại hệ thống

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

Cách khắc phục?

Quan trọng nhất

Trả lời

6

Bạn đang nhận được phản ứng lỗi sau:

Yêu cầu này đòi hỏi phải có chứng thực HTTP

Đề xuất để thêm thông tin ủy quyền trong phần đầu.Giống như:

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); 
}); 

trong trường hợp ủy quyền, bạn có thể sử dụng các tiêu đề sau đây thay vì:

Proxy-Authorization 
+0

nếu tài khoản và mật khẩu của tôi cả hai đều là "tomcat", sau đó 'Authorization': ' Basic '+ new Buffer ("tomcat" +': '+ "tomcat) .toString (' base64 ')? – alongquan

+0

vâng ... dường như đang hoạt động. –

+0

Thansk U rất nhiều, đã thành công ...: D – alongquan

0

Máy chủ muốn có tên người dùng và mật khẩu, hoặc yêu cầu cơ chế ủy quyền khác trước khi nó cho phép bạn truy cập tệp theo cách này.

Để xem làm thế nào để cung cấp một người dùng và mật khẩu khi đưa ra yêu cầu trong Node.js, nhìn vào How to use http.client in Node.js if there is basic authorization

Làm sao chúng ta biết điều này có thể là vấn đề?

Hai chuỗi thú vị trong sự trở lại hệ thống:

HTTP Status 401

This request requires HTTP authentication

Từ Wikipedia: List of HTTP Status Codes

401 Unauthorized Tương tự như 403 Forbidden, nhưng đặc biệt để sử dụng khi xác thực là bắt buộc và đã không thành công hoặc chưa được cung cấp . [2] Câu trả lời phải bao gồm trường tiêu đề WWW-Authenticate chứa thử thách áp dụng cho tài nguyên được yêu cầu. Xem Xác thực truy cập cơ bản và xác thực truy cập thông báo.

Một khả năng khác là máy chủ có thể được thiết lập để phát ra 401 thay vì 403 nhưng không thực sự chấp nhận bất kỳ tên người dùng hoặc mật khẩu nào.

+0

Cảm ơn bạn rất nhiều – alongquan

Các vấn đề liên quan