javascript - 如何使用 JavaScript 发出 HTTP 请求以从 Ubiquity AirMax 或 AirFibre radio 获取 status.cgi json 数据?

标签 javascript node.js http-headers

我的目标是使用 HTTP 请求从 UBNT radio ( https://www.ubnt.com/ ) 获取状态数据。 Web 界面 url 格式为 http://192.168.0.120/status.cgi 。发出请求需要身份验证 cookie。使用从现有 Web 界面复制的 cookie,我能够成功检索数据。

这是我当前使用 Meteor 框架的代码。

radioHost = "http://192.168.0.120";
HTTP.call("POST", radioHost + "/login.cgi",
    {
        headers: {
            "Content-Type": "multipart/form-data"
        },
        data: {
            username: "ubnt",
            password: "ubnt"
        }
    }, (err, res) = > {
    if(err) return console.log(err);
    var cookie = res.headers["set-cookie"][0];

    HTTP.call("GET", radioHost + "/status.cgi", {
        headers: {
            cookie
        }
    }, (err, res) = > {
        if(err) return console.log("Error");
            console.log(res);
    })
})

上面的代码成功实现了两个请求。然而,服务器使用错误的 token (“set-cookie”字符串)响应第一个。使用现有 Web 框架中的 cookie,响应是正确的。

这是一个用 Python 编写的库,我相信它可以做类似的事情。 https://github.com/zmousm/ubnt-nagios-plugins

我相信我的问题在于 HTTP 请求和 Web api 不与用户名和密码配合。

预先感谢您的帮助。

最佳答案

不建议直接对 URL 进行 POST 请求。当您打开浏览器时,您只是不直接登录。您获取页面然后提交/登录

不模拟此行为可能会影响某些站点,具体取决于服务器的工作方式。

因此,如果总是想像真实用户/浏览器一样查看模拟,请先发出 GET 请求,然后发出 POST

还捕获第一个 GET 请求中的所有 Cookie,然后将其传递给下一个请求

关于javascript - 如何使用 JavaScript 发出 HTTP 请求以从 Ubiquity AirMax 或 AirFibre radio 获取 status.cgi json 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185397/

相关文章:

javascript - 从切片方法返回剩余的整个文本

node.js - 如何使用 Node 从 mysql 正确返回结果?

node.js - Promise<T> 的 TypeScript 参数,为什么不是 Promise<T1,T2>?

视频加载 206 - 部分内容

c# - HttpClient/.NET Core 不支持的媒体类型

javascript - 使用indexOf从列表中删除对象?

javascript - 如何找到我们点击的链接?

javascript - Gulp glob 忽略文件类型而不复制空文件夹

javascript - 如何将 vm.SourceTextModule 创建的模块的导入依赖项链接到它?

c# - 使用 HttpWebRequest 收到的截断响应