Починить nodejs скрейпер

1 500 руб. за проект
24 июля 2019, 13:37 • 6 откликов • 47 просмотров
Есть задача - через nodejs скачивать главную страницу сайта и открывать ее (macys.com).
Через curl сайт открывается, с этого же сервера через nodejs request - не открывается (выдает forbidden - детектится фаерволлом).
Требуется разобраться, почему. Задача запустить puppeteer не стоит, хотелось бы разобраться в чем отличие между curl и nodejs запросом - запускаются с одной машины, расположенной в NYC.

Пример кода который работает и скачивает сайт:
const {execSync} = require('child_process');
const command = `curl 'https://www.macys.com/' -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'accept-encoding: deflate, gzip' -H 'accept-language: en-US,en;q=0.9,nl;q=0.8,pt;q=0.7,ru;q=0.6,es;q=0.5' --compressed --insecure --proxy-insecure -ivs > ~/1.txt `;

execSync(command).toString();

код который не работает:
var https = require("https");
var fs = require("fs");




var headers = {
'authority': 'www.macys.com',
'pragma': 'no-cache',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'accept-encoding': 'deflate, gzip',
'accept-language': 'en-US,en;q=0.9,nl;q=0.8,pt;q=0.7,ru;q=0.6,es;q=0.5'
};

var options = {
host: 'www.macys.com',
port: 443,
path: '/',
method: 'GET',
headers: headers
};



console.log(options);


var req = https.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});

req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();





Отзывы
R50 7172d6be34328c8fb9a24212d04b6594
Заказчик
Было приятно посотрудничать, работа выполнена качественно!
5 лет назад
5 лет назад