Починить nodejs скрейпер
1 500 руб. за проект
Есть задача - через 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();
Через 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();
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.