Получение «Отказано в доступе» при загрузке URL в JSDOM - PullRequest
2 голосов
/ 30 декабря 2011

Я пытаюсь очистить некоторую информацию о странице, используя функцию jsdom.env.Однако страница, возвращаемая в обратном вызове env(), описывает, как доступ к серверу запрещен, а не контент, который я надеюсь увидеть при загрузке того же URL-адреса в браузере.

Таким образом,Кажется, есть разница в том, как браузер загружает страницу по сравнению с тем, как ее загружает jsdom.Это что-то, что можно настроить в модуле jsdom?

Редактировать:

Пример URL: http://www.bestbuy.com/site/HP+-+20%22+Widescreen+Flat-Panel+LCD+Monitor/1422209.p?id=1218257754431&skuId=1422209

Обновить:

Проблема заключалась в том, что jsdom не указывал заголовок http пользовательского агента.Посмотрите подробный ответ ниже

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

Проблема заключалась в том, что jsdom не указывает http-заголовок 'User-Agent', который проверяет сервер bestbuy.com.Если он пуст, доступ запрещен.В настоящее время нет способа указать это через jsdom - https://github.com/tmpvar/jsdom/issues/196

Обходной путь, который помог мне использовать модуль request для получения содержимого страницы, а затем перейти к jsdomработать на.Модуль request позволяет указать пользовательский агент

Пример:

var request = require('request'),

getPage = function(someUri, callback) {
  request({uri: someUri, headers:{'User-Agent': 'Mozilla/5.0'}}, function (error, response, body) {
    console.log("Fetched " +someUri+ " OK!");
    callback(body);
  });
}

getPage('http://www.bestbuy.com/', function(body) {
   console.log(body)
});
0 голосов
/ 30 декабря 2011

По умолчанию междоменные вызовы AJAX невозможны.Больше информации здесь: http://m.snook.ca/archives/javascript/cross_domain_aj

...