Я спробував зовсім інший підхід - використовувати Scrap, однак у нього така ж проблема! Ось як я це вирішив: ТАК: Python Scrapy - фільтр на основі міметипу, щоб уникнути завантаження нетекстових файлів?
Рішення полягає в налаштуванні Node.js
проксі і налаштування Scrap для використання його через http_proxy
змінну середовища.
Що повинен робити проксі :
- Візьміть HTTP-запити від Scrap і відправляйте їх на сканований сервер. Потім він повертає відповідь на Scrap, тобто перехоплює весь трафік HTTP.
- Для бінарних файлів (на основі евристичної, яку ви реалізуєте) він надсилає
403 Forbidden
помилку Scrap і негайно закриває запит / відповідь. Це допомагає заощадити час, трафік і Scrap не завершаться.
Приклад проксі-коду, який насправді працює!
http.createServer(function(clientReq, clientRes) {
var options = {
host: clientReq.headers['host'],
port: 80,
path: clientReq.url,
method: clientReq.method,
headers: clientReq.headers
};
var fullUrl = clientReq.headers['host'] + clientReq.url;
var proxyReq = http.request(options, function(proxyRes) {
var contentType = proxyRes.headers['content-type'] || '';
if (!contentType.startsWith('text/')) {
proxyRes.destroy();
var httpForbidden = 403;
clientRes.writeHead(httpForbidden);
clientRes.write('Binary download is disabled.');
clientRes.end();
}
clientRes.writeHead(proxyRes.statusCode, proxyRes.headers);
proxyRes.pipe(clientRes);
});
proxyReq.on('error', function(e) {
console.log('problem with clientReq: ' + e.message);
});
proxyReq.end();
}).listen(8080);