【问题标题】:HTTP Basic Authorization on IP Camera using AJAX / jQuery使用 AJAX / jQuery 对 IP 摄像机进行 HTTP 基本授权
【发布时间】:2011-11-15 14:03:35
【问题描述】:

我知道这个问题之前被问过很多次,但似乎没有一个回答对我有用,所以这是我的问题:

我有一个位于 Intranet 中的 Sony IP 摄像机。我正在为内部用户构建一个带有 PHP/MySQL 身份验证的站点,以便能够查看 MJPEG 流,但相机本身需要 http 身份验证。我不想让用户输入他们的用户名和密码来登录相机页面,然后必须输入 http 身份验证凭据(在弹出窗口中)才能看到流。我尝试使用 jQUERY 更改标题无济于事。请记住,摄像机必须有自己的身份验证,以便用户不能只是随机输入 IP 并查看流。我希望能够控制谁查看什么以及何时查看。

我假设如果我在用户登录页面时进行了正确的身份验证调用,那么他们将可以使用该摄像头,因为他们会“静默”登录。此外,如果我从终端使用 wget --headers: "Authorization: blah_Blah" 它确实有效,但我不能从 jQuery 中做到这一点!这是我的代码:

$.ajax({
    url : "http://some_ip_internally_for_the_cam/some_page_on_cam_that_needs_authentication_to_access_otherwise",
    method : 'GET',
    beforeSend : function(req) {
        req.setRequestHeader('Authorization', "some_base_64_stuff_that_works_in_wget");
    },
    success: function() {
       $("div.log").attr("innerHTML", "ok");
    }
});

用户登录后立即加载。

有什么建议吗?

【问题讨论】:

标签: javascript jquery ajax http authentication


【解决方案1】:

我在 Firefox 中遇到了同样的 Javascript 错误:

... 0x804b000f (NS_ERROR_IN_PROGRESS) [nsIXMLHttpRequest.setRequestHeader] ...

当我试图在一些 XMLHttpRequest 对象中设置一个新的 HTTP 标头时:

xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

发生错误是因为我试图在 XMLHttpRequest.open() 方法之前设置 HTTP 标头。

来源: http://www.webmasterworld.com/forum91/4542.htm

【讨论】:

    【解决方案2】:

    如果您的意思是 div.log 没有显示“ok”消息,可能是因为您的 DOM 代码不正确。这个:

    $("div.log").attr("innerHTML", "ok");
    

    设置div 的DOM 属性,而不是它的实际innerHTML。相反,您应该这样做:

    $("div.log").html("ok");
    

    【讨论】:

    • 使用innerHTML 通常是糟糕的编程。这次就是其中之一。使用 DOM 规范的内容,一切都会好起来的。您不需要使用 innerHTML。
    • No 最终结果是验证窗口仍然弹出。即使我删除了与 div.log 相关的部分代码。我还在 Firefox 中收到以下错误:错误:未捕获的异常:[Exception...“组件返回失败代码:0x804b000f (NS_ERROR_IN_PROGRESS) [nsIXMLHttpRequest.setRequestHeader]”nsresult:“0x804b000f (NS_ERROR_IN_PROGRESS)”位置:“JS 框架 :: hide_my_address :: :: line 35" data: no]
    • 这个问题与div无关。请忘记div。我专注于ajax请求。我删除了更改 div 的 html 的代码。问题是它没有对用户进行身份验证。
    【解决方案3】:

    您是否尝试过 .ajax 中的用户名和密码字段?

    $.ajax({
        url: "http://mydomain/mypage.php",
        username: "myUsername",
        password: "myPassword",
        error: function () {
        }
    }).done(function(html) {
            //Do Stuff
    });
    

    这在类似情况下对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-03
      • 2020-03-18
      • 2013-04-13
      • 2021-09-08
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 2019-02-07
      相关资源
      最近更新 更多