2013-09-22 3 views
0

Я пытаюсь войти в свой Netgear маршрутизатор с помощью JavaScript (JQuery):Basic Auth с JQuery: доступ к ограниченным URI отказано код: "1012" (NS_ERROR_DOM_BAD_URI)

username = "admin"; 
password = "myrouterpassword"; 
url = "http://192.168.1.1"; 
async = false; 
type = "GET"; 
timeout = 3000; 
$.ajax({url:url, type:type, async:async, 
     username:username, password:password, 
     success: function(reponse) {.. stuff ..}, 
     error: function(error) {.. stuff ..} 
     }); 

Это возвращает «Доступ к ограниченным URI отклонил "ошибку с Firefox и" NetworkError: произошла сетевая ошибка "с Chrome. Я не верю, что это проблема с несколькими доменами, поскольку у меня есть вызов, который я делаю с чрезвычайно похожим конструктом jQuery на другой ресурс в 192.168.1.2, и он работает как шарм (за исключением того, что он не защищен паролем, поэтому я не используя поля имени пользователя и пароля).

Моя версия jQuery - 1.9.1. Я попробовал несколько вариантов здесь. Например, добавив это Аякс варианты:

xhrFields:{ withCredentials: true } 

И я также пытался не используя имя пользователя и пароль поле и используя заголовки вместо вычисляя авторизацию с базой 64 и с помощью этого:

headers:{'Authorization':auth} 

Я также попытался старшим рекомендуемый подход:

beforeSend:function(req) { req.setRequestHeader('Authorization', auth); } 

Когда этот маршрутизатор с помощью Python на внутреннем интерфейсе, он полностью работает:

passman = urllib2.HTTPPasswordMgrWithDefaultRealm() 
passman.add_password(None, baseurl, username, password) 
authhandler = urllib2.HTTPBasicAuthHandler(passman) 
opener = urllib2.build_opener(authhandler) 
urllib2.install_opener(opener) 
devhandle= urllib2.urlopen(baseurl+'/DEV_device.htm') 
devcontent=devhandle.read() 

Это дает мне список устройств, подключенных к этому маршрутизатору. Мне действительно нужно сделать это в Javascript, и, зная, что я могу подключиться к другим устройствам в одном и том же домене (192.168.1.x), предполагает, что он должен быть выполнимым. Открыта для всех предложений, и любая помощь действительно оценена!

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Я добавил DATATYPE: "HTML" и ошибка изменяется на * NS_ERROR_DOM_BAD_URI *. Добавление dataType: «json» вместо этого вызывает одно и то же. Когда я сменил его на dataType: «jsonp» и получил xhrFields: {withCredentials: true}, а также я увидел всплывающее окно входа в маршрутизатор! Таким образом, он явно достигает маршрутизатора. Я не хочу этого явно - логин должен происходить беззвучно, но это тем не менее. Я возвращаю его обратно в сообщение об ошибке при входе в систему: {«readyState»: 4, «status»: 200, «statusText»: «success»}. Всплывающее окно входа является переходным (естественно, потому что, как только я вошел в систему, он не запрашивает меня снова). Все еще возиться с ним. Если я заставлю его работать, я обновлю. Если есть какие-то идеи, пожалуйста, дайте мне знать.

CHROME CONSOLE INFO: Это то, что я вижу в консоли:

Resource interpreted as Script but transferred with MIME type text/html: "http://192.168.1.1/?callback=jQuery19109538986752741039_1379841839394&_=1379841839396". jquery-1.9.1.js:8336 
send jquery-1.9.1.js:8336 
jQuery.extend.ajax jquery-1.9.1.js:7978 
ajaxnow mainscreen.htm:79 
onclick mainscreen.htm:1 
Uncaught SyntaxError: Unexpected token < 

ajaxnow() является функцией в моем скрипте, который делает вызов .ajax.

+0

Чтобы домен считался одним и тем же, хост (весь ip-адрес), протокол (http vs https) и порт должны совпадать точно, это так? –

+0

Я пошел и дважды проверил. Да, точно так же Нет SSL, нет различий в портах (то есть доступное устройство находится на 192.168.1.2:80 и маршрутизаторе на 192.168.1.1:80). Спасибо. –

ответ

1

Если вы работаете в вопросах Междоменное, и вы хотите, чтобы отключить проверку можно запустить хром без веб-безопасности:

chromium-browser --disable-web-security 

Само собой разумеется, что это крайне опасно, если ваш браузер куки/сохраненные пароли для любые чувствительных сайтов.

+0

Пароль и usernam e предоставляются бэкэнд (т. е. фактически не будут настроены, как я показал выше, хотя я попытался полностью исключить возможность любых проблем с бэкэнд). Я попробую ваше предложение проверить кросс-доменные проблемы Christophe. Забавно, что это работает (минус auth) для другого устройства в 192.168.1.2, что заставляет меня думать, что это не должно быть проблемой crossdomain, хотя я мог ошибаться. Спасибо! –

0

Прежде всего, добавьте «http: //» на ваш адрес.

Затем python не применяет политику одного и того же происхождения, но браузеры. Браузеры разрешают/запрещают запросы на кросс-начало в соответствии с заголовками Access-Control-Allow- * ответа OPTIONS от целевого хоста. MDN reference. Поэтому, если вы не можете изменить страницу/ответ маршрутизатора или запустить версию браузера с защитой от взлома, это не произойдет в браузере на другом хосте.

Наконец, возможно, node.js - это то, с чем вам следует идти.

+0

Спасибо за предложения ledzep2. Я случайно потерял http: //. Они действительно присутствуют в коде (и отредактированы, чтобы показать его здесь сейчас). Кроме того, учитывая, что javascript успешно имеет доступ к другому устройству с тем же номером домена и порта, это не похоже на проблему с перекрестным доменом (конечно, я мог ошибаться). В будущем я буду смотреть на node.js. Тем не менее, все это застряло. –

+0

Возможно, вы можете предоставить дополнительную информацию из консоли Chrome или tcpdump. – ledzep2

+0

Добавил его выше. Похоже, что входящий вызов jsonp проходит, но затем возникают проблемы с типом, потому что возвращаемый маршрутизатор является html. Я правильно понимаю это? –

-1

Возможно, я ошибся в ошибке для этого сообщения об ошибке 192.168.1.1:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Короткий ответ, что рабочий для меня (после того, как все предложения были отправлены) состоял в том, чтобы снова подключить и перезагрузить все.

В конце концов, после того, как мы не смогли защитить сеть в течение 2 дней, но с подключением к Интернету, мой прогноз застыл всякий раз, когда мой ноутбук Mac был подключен к нему, а в Интернете они вообще спустились. Я остаюсь в арендованной квартире в отпуске, поэтому не было установленного компакт-диска для маршрутизатора Netgear WNR1000v3. Потеряв соединение в целом, я повторно переустановил маршрутизатор и повторно подключил все соединения (ничего хорошего), и, наконец, перезагрузил кабельный модем ((Scientific Atlanta) и получил интернет назад, и в то же время набралось такое же сообщение 192.168.1.1:80 192.168.1.1 в браузер, он, наконец, позволяет мне ввести имя пользователя и пароль по умолчанию (пользователь, пароль), чтобы войти в маршрутизатор (через 192.168.1.1) и разрешить доступ ко всем настройкам, включая изменение настроек пароля.

Смежные вопросы