Я пытаюсь войти в свой 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.
Чтобы домен считался одним и тем же, хост (весь ip-адрес), протокол (http vs https) и порт должны совпадать точно, это так? –
Я пошел и дважды проверил. Да, точно так же Нет SSL, нет различий в портах (то есть доступное устройство находится на 192.168.1.2:80 и маршрутизаторе на 192.168.1.1:80). Спасибо. –