const request = require('request');
const URL = 'http://de.releases.ubuntu.com/xenial/ubuntu-16.04.3-desktop-amd64.iso';
const MAX_SIZE = 10 * 1024 * 1024 // 10MB , maximum size to download
let total_bytes_read = 0;
1 - Nếu phản hồi từ máy chủ được nén gzip, bạn nên bật tùy chọn gzip. https://github.com/request/request#examples Để tương thích ngược, nén phản hồi không được hỗ trợ bởi mặc định. Để chấp nhận phản hồi nén gzip, hãy đặt tùy chọn gzip thành true.
request
.get({
uri: URL,
gzip: true
})
.on('error', function (error) {
//TODO: error handling
console.error('ERROR::', error);
})
.on('data', function (data) {
// decompressed data
console.log('Decompressed chunck Recived:' + data.length, ': Total downloaded:', total_bytes_read)
total_bytes_read += data.length;
if (total_bytes_read >= MAX_SIZE) {
//TODO: handle exceeds max size event
console.error("Request exceeds max size.");
throw new Error('Request exceeds max size'); //stop
}
})
.on('response', function (response) {
response.on('data', function (chunk) {
//compressed data
console.log('Compressed chunck Recived:' + chunk.length, ': Total downloaded:', total_bytes_read)
});
})
.on('end', function() {
console.log('Request completed! Total size downloaded:', total_bytes_read)
});
NB: Nếu máy chủ không nén phản ứng nhưng bạn vẫn sử dụng gzip tùy chọn/giải nén, sau đó các đoạn giải nén & các đoạn ban đầu sẽ bình đẳng.Do đó bạn có thể thực hiện kiểm tra Giới hạn theo cách (từ đoạn đã nén/nén) Tuy nhiên nếu đáp ứng được nén , bạn nên kiểm tra giới hạn kích thước của đoạn đã giải nén
2 - nếu phản hồi không bị nén cần tùy chọn gzip để giải nén
request
.get(URL)
.on('error', function (error) {
//TODO: error handling
console.error('ERROR::', error);
})
.on('response', function (response) {
response.on('data', function (chunk) {
//compressed data
console.log('Recived chunck:' + chunk.length, ': Total downloaded:', total_bytes_read)
total_bytes_read += chunk.length;
if (total_bytes_read >= MAX_SIZE) {
//TODO: handle exceeds max size event
console.error("Request as it exceds max size:")
throw new Error('Request as it exceds max size');
}
console.log("...");
});
})
.on('end', function() {
console.log('Request completed! Total size downloaded:', total_bytes_read)
});
Điều này có hữu ích không? - https://stackoverflow.com/questions/15636095/how-to-limit-response-length-with-http-request-in-node-js – Jackthomson
Cảm ơn bạn nhưng tôi sử dụng một gói được gọi là yêu cầu và nó được đơn giản hóa phiên bản của yêu cầu HTTP nodejs. Tuy nhiên, câu trả lời của bạn có thể hữu ích vì nếu tôi không nhận được câu trả lời, tôi sẽ phải thay thế gói yêu cầu bằng yêu cầu HTTP từ nút. –
Bạn đang nói abou gói này - https://www.npmjs.com/package/request - Nếu như vậy bạn không thể sử dụng nó chính xác như câu trả lời được liên kết ở trên, thư viện yêu cầu này vẫn trả về cùng một đối tượng phản hồi để nó có các nguyên mẫu trên và bạn có thể móc vào nó chỉ là cùng một quyền? Hoặc thư viện này có xóa chức năng đó không? Thư viện này dường như làm cho quá trình dễ dàng hơn một chút với một số cú pháp đẹp .. ở cốt lõi của nó nó chỉ trả về một yêu cầu nút và đối tượng phản hồi – Jackthomson