JavaScript (jQuery) を使用して Netgear ルーターにログインしようとしています:
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 ..}
});
これにより、Firefox では「制限付き URI へのアクセスが拒否されました」というエラーが返され、Chrome では「NetworkError: ネットワーク エラーが発生しました」というエラーが返されます。192.168.1.2 にある別のリソースと非常によく似た jQuery コンストラクトを使用して呼び出しを行っているため、これがクロスドメインの問題であるとは思いません。ユーザー名とパスワードのフィールドを使用します)。
私のjQueryのバージョンは1.9.1です。ここでいくつかのバリエーションを試しました。たとえば、これを ajax オプションに追加します。
xhrFields:{ withCredentials: true }
また、ユーザー名とパスワードのフィールドを使用せず、代わりにヘッダーを使用して、Base 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 呼び出しを行うスクリプト内の関数です。