Нет содержимого тела, когда nodejs-запрос получает, но работает в браузере или curl

запрос не получает содержимого тела с заголовком «длина содержимого: 0».

ресурс: https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096

Это rss-ссылка, хорошо работает в браузере и curl. curl test на linux, и wget тоже работает.

вот простой код:

const req = require('request');
req.get({
  url: 'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096',
  rejectUnauthorized: false
}, (err, res, body) => {
  console.log(res)
});

протестируйте онлайн-симулятор, получите тот же результат https://repl.it/repls/ScalyAquamarineObjectpool

я думаю, что это должен быть текстовый/xml-контент, а не пустой.

отклик:

{
statusCode: 200,
  body: '',
  headers:
   { 'cache-control': 'private,No-cache',
     'set-cookie':
      [ 'ASP.NET_SessionId=kzdhyxq2grttp5awwpqzxyen; path=/; secure; HttpOnly' ],
     'x-frame-options': 'SAMEORIGIN',
     'strict-transport-security': 'max-age=0',
     'x-xss-protection': '1; mode=block',
     'x-content-type-options': 'nosniff',
     'content-security-policy':
      'frame-ancestors \'self\' https://www-mgr.gov.taipei http://www-mgr.gov.taipei',
     date: 'Wed, 03 Apr 2019 06:44:47 GMT',
     connection: 'close',
     'content-length': '0' },
  request:
   { uri:
      Url {
        protocol: 'https:',
        slashes: true,
        auth: null,
        host: 'www.doe.gov.taipei',
        port: 443,
        hostname: 'www.doe.gov.taipei',
        hash: null,
        search: '?SN=8A3B3293C269E096',
        query: 'SN=8A3B3293C269E096',
        pathname: '/OpenData.aspx',
        path: '/OpenData.aspx?SN=8A3B3293C269E096',
        href:
         'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096' },
     method: 'GET',
     headers: {} }
}

person 王仁宏    schedule 03.04.2019    source источник


Ответы (2)


На ваш обновленный вопрос: похоже, что добавление пользовательского агента помогает:

const req = require('request');
req.get({
  url: 'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096',
  rejectUnauthorized: false,
  headers: {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3750.0 Iron Safari/537.36'
  }
}, (err, res, body) => {
  console.log(body)
});
person user826955    schedule 03.04.2019
comment
спасибо, я забыл, что на каком-то сервере есть анализатор ботов/пауков - person 王仁宏; 03.04.2019

Подпись вашей функции обратного вызова неверна. В Node.JS обычно первым параметром обратного вызова является (необязательный) объект ошибки.

Попробуй это:

const req = require('request');
req.get({
  url: 'https://www.doe.gov.taipei/OpenData.aspx?SN=8A3B3293C269E096',
  rejectUnauthorized: false
}, (err, res, body) => {
  console.log(res)
});
person user826955    schedule 03.04.2019