Как запросить страницу, защищенную паролем в Javascript - PullRequest
3 голосов
/ 11 марта 2011

Я работаю над очень простым гаджетом на боковой панели, чтобы проанализировать ежемесячное использование пропускной способности моего маршрутизатора и определить, насколько я впереди или позади в этом месяце. Данные находятся на веб-странице, защищенной паролем (я использую DD-WRT, если это имеет значение). Я хотел бы передать запрос страницы маршрутизатору с Javascript вместе со всей информацией для аутентификации, чтобы получить страницу за один раз, но я не могу найти правильный синтаксис для этого. Есть идеи?

Вот мой код:

var ua = navigator.userAgent.toLowerCase();
        if (!window.ActiveXObject){
          req = new XMLHttpRequest();
        }else if (ua.indexOf('msie 5') == -1){
          req = new ActiveXObject("Msxml2.XMLHTTP");
        }else{
          req = new ActiveXObject("Microsoft.XMLHTTP");
        }

        req.open('GET', 'http://192.168.1.1/Status_Internet.asp', false, "username", "password");   
        req.send(null);  
        if(req.status == 200){
           dump(req.responseText);
        } else{
            document.write("Error");
        }

        document.write("Second Error");

Firebug указывает, что выдает ошибку на req.send(null) - в частности, Access to restricted URI denied" code: "1012.

Это может быть из-за политики того же происхождения, но в таком случае что я могу использовать вместо xmlhttpRequest?

Ответы [ 4 ]

1 голос
/ 11 марта 2011

Это равно из-за политики одного и того же происхождения, альтернативой является iframe, но на самом деле это не даст вам того, что вы хотите.

Если вы используете http-auth, вы могли запросить страницу с помощью http://username:pass@site, но я должен признать, что не пытался использовать это долгое время, поэтому я не знаю, если это все еще поддерживается.

РЕДАКТИРОВАТЬ:

Если это не работает, возможно, вы можете использовать базовую http-аутентификацию, как описано здесь: http://en.wikipedia.org/wiki/Basic_access_authentication, но для этого потребуется подать в суд на прокси-сервер, поскольку вы не можете манипулировать заголовками запросов из javascript, когда xhr не вариант.

0 голосов
/ 11 марта 2011

Это функция безопасности: вы видите, что существуют вредоносные скрипты, использующие аналогичную технику для взлома маршрутизаторов (кто все равно меняет свой пароль маршрутизатора? Очевидно, не Джо Х. Шмо).

В соответствии с Одинаковой политикой происхождения запросы AJAX ограничены доменом (и портом), откуда они были отправлены: следовательно, с локальной страницы вы не можете сделать запрос на 192.168.1.1:80 .

Существует возможный обходной путь - прокси на стороне сервера (например, PHP-скрипт, который выбирает страницы маршрутизатора для вас ) внутри вашей сети.

0 голосов
/ 11 марта 2011

Если политика того же происхождения не является проблемой, загрузите на свою страницу jQuery .

и используйте метод jQuery $ .ajax.

$.ajax({
  url: "path/to/your/page.html", // self-explanatory
  password:"your password", // a string with your password.
  success: function(data){ // on sucsess:
  $("someDiv").html(data); // load in the retrived page
 }
});

Подробнее см. jQuery ajax API .

0 голосов
/ 11 марта 2011

Вам необходимо добавить заголовок Authorization к запросу.Я не эксперт по AJAX, поэтому я не уверен, что вы можете изменить поля заголовка в запросах AJAX.Если вы не можете, то вы обречены.

Если вы можете, то эта статья в Википедии содержит пример как это должно выглядеть.

...