3

我正在开发一个非常简单的侧边栏小工具来分析我的路由器每月的带宽使用情况,并确定我在那个月的领先或落后程度。数据位于路由器托管的受密码保护的网页中(如果重要,我正在使用 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

4 回答 4

1

因为同源策略,替代方案是 iframe,但这不会真正给你你想要的。

如果是 http-auth,你以前可以使用http://username:pass@site请求页面,但我必须承认我已经很长时间没有尝试使用它了,所以我不知道它是否仍然支持。

编辑:

如果这不起作用,也许您可​​以使用此处所述的基本 http 身份验证:http ://en.wikipedia.org/wiki/Basic_access_authentication但这需要您起诉服务器端代理,因为您无法操纵请求当 xhr 不是一个选项时,来自 javascript 的标头。

于 2011-03-11T16:47:40.447 回答
0

您需要Authorization在请求中添加标头。我不是 AJAX 专家,所以我不确定您是否可以修改 AJAX 请求中的标头字段。如果你做不到,那你就完蛋了。

如果可以,那么此 Wikipedia 文章包含一个示例,它必须是什么样子。

于 2011-03-11T16:49:38.933 回答
0

如果同源策略不是问题,则在您的页面上加载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

于 2011-03-11T16:52:12.613 回答
0

这是一个安全功能:你看,有恶意脚本使用类似的技术来破解路由器(谁更改了他们的路由器密码?显然不是 Joe X. Schmoe)。

Same Origin Policy下,AJAX 请求仅限于它们发起的域(和端口):因此,您不能从本地页面向 192.168.1.1:80 发出请求。

有一种可能的解决方法 - 在您的网络中使用服务器端代理(例如,为您获取路由器页面的 PHP 脚本)。

于 2011-03-11T16:59:40.187 回答