mirror of
https://github.com/tenrok/axios.git
synced 2026-05-30 15:24:11 +03:00
Adding config option to restrict based on the size of the response co…
This commit is contained in:
@@ -263,7 +263,10 @@ These are the available config options for making requests. Only the `url` is re
|
||||
// as well as 'GET' downloads
|
||||
progress: function(progressEvent) {
|
||||
// Do whatever you want with the native progress event
|
||||
}
|
||||
},
|
||||
|
||||
// `maxContentLength` defines the max size of the http response content allowed
|
||||
maxContentLength: 2000
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -90,6 +90,11 @@ module.exports = function httpAdapter(resolve, reject, config) {
|
||||
var responseBuffer = [];
|
||||
stream.on('data', function handleStreamData(chunk) {
|
||||
responseBuffer.push(chunk);
|
||||
|
||||
// make sure the content length is not over the maxContentLength if specified
|
||||
if (config.maxContentLength > -1 && Buffer.concat(responseBuffer).length > config.maxContentLength) {
|
||||
reject(new Error('maxContentLength size of ' + config.maxContentLength + ' exceeded'));
|
||||
}
|
||||
});
|
||||
|
||||
stream.on('end', function handleStreamEnd() {
|
||||
|
||||
+3
-1
@@ -59,5 +59,7 @@ module.exports = {
|
||||
timeout: 0,
|
||||
|
||||
xsrfCookieName: 'XSRF-TOKEN',
|
||||
xsrfHeaderName: 'X-XSRF-TOKEN'
|
||||
xsrfHeaderName: 'X-XSRF-TOKEN',
|
||||
|
||||
maxContentLength: -1
|
||||
};
|
||||
|
||||
@@ -127,4 +127,31 @@ module.exports = {
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
testMaxContentLength: function(test) {
|
||||
var str = Array(100000).join('ж');
|
||||
|
||||
server = http.createServer(function (req, res) {
|
||||
res.setHeader('Content-Type', 'text/html; charset=UTF-8');
|
||||
res.end(str);
|
||||
}).listen(4444, function () {
|
||||
var success = false, failure = false, error;
|
||||
|
||||
axios.get('http://localhost:4444/', {
|
||||
maxContentLength: 2000
|
||||
}).then(function (res) {
|
||||
success = true;
|
||||
}).catch(function (res) {
|
||||
error = res;
|
||||
failure = true;
|
||||
});
|
||||
|
||||
setTimeout(function () {
|
||||
test.equal(success, false, 'request should not succeed');
|
||||
test.equal(failure, true, 'request should fail');
|
||||
test.equal(error.message, 'maxContentLength size of 2000 exceeded');
|
||||
test.done();
|
||||
}, 100);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user