Запрос Node.js не возвращает HTML на определенных веб-сайтах

Я пытаюсь написать веб-скребок для базы данных зданий Нью-Йорка, и я пытаюсь получить html фактического веб-сайта. По какой-то причине, когда я помещаю URL-адрес веб-сайта, который пытаюсь очистить, моя программа ничего не делает. Всякий раз, когда я помещаю URL-адрес практически любого другого веб-сайта, я фактически получаю запрошенный html. Это потому, что я пытаюсь парсить правительственный сайт?

var request = require("request");

request(
    { uri: "http://a810-bisweb.nyc.gov/bisweb/JobsQueryByNumberServlet?requestid=3&passjobnumber=123768556&passdocnumber=01" },
    function(error, response, body) {
        console.info(body);
        console.info("hello")
    }
);

Я ожидал получить html в виде строки, напечатанной в моей консоли, вместо этого я ничего не получил. «Привет» даже не печатается. Однако, когда я пробую любой другой сайт, я получаю фактическую строку html.

Вам будет легче жить, если вы ВСЕГДА будете проверять наличие ошибок.

jfriend00 17.07.2019 07:27

У меня не было никаких ошибок, моя консоль просто зависла

Omar Elhosseni 17.07.2019 09:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

URL-адрес, который вы пытаетесь получить, дает отказ в доступе.

Я предпочитаю API на основе обещаний для запроса, поэтому следующий код

var request = require("request");
request
  .get("http://a810-bisweb.nyc.gov/bisweb/JobsQueryByNumberServlet?requestid=3&passjobnumber=123768556&passdocnumber=01")
  .on('response', function(response) {
    console.info('Hello');
    console.info(response.statusCode);
    console.info(response.headers['content-type']);
  })
  .on('error', function(error){
    console.info(error);
  })

распечатает

Hello
403
text/html

Я предполагаю, что причина, по которой вы получаете 403, заключается в том, что сайт, вероятно, устанавливает файлы cookie или имеет какое-то состояние сеанса, и вы переходите непосредственно к нужному URL-адресу, а не сначала попадаете на главную страницу. Я также получаю 403 в браузере, если я перехожу непосредственно к URL-адресу, но если я сначала перехожу на главную страницу, а затем к URL-адресу, я получаю страницу.

Большое спасибо за помощь. Есть ли способ обойти это в node. Могу ли я имитировать это состояние сеанса?

Omar Elhosseni 17.07.2019 09:38

вы можете увидеть несколько примеров здесь stackoverflow.com/questions/19936705/…, которые являются публикацией, но применимы, также установите заголовки запроса, чтобы сказать, что вы пришли с первой страницы. Также поэкспериментируйте с этим, посмотрите, сможете ли вы сделать это, просто настроив заголовок запроса, чтобы сказать, что вы пришли с главной страницы сайта. Здесь показано, как установить заголовки с запросом github.com/request/request#custom-http-заголовки, чтобы установить заголовки реферера ['Referer'] = "a810-bisweb.nyc.gov"

user254694 17.07.2019 09:51

Для тех, кому интересно, я смог обойти ограничения, установленные сайтом, с помощью tampermonkey. Мне просто нужно было получить доступ к DOM в любом случае, поэтому tampermonkey позволил мне запустить скрипт, как только я зашел на сайт.

Другие вопросы по теме