首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用javascript发出HTTP请求,从Ubiquity AirMax或AirFibre无线电获取status.cgi json数据?

如何使用javascript发出HTTP请求,从Ubiquity AirMax或AirFibre无线电获取status.cgi json数据?
EN

Stack Overflow用户
提问于 2018-03-09 09:47:24
回答 1查看 266关注 0票数 0

我的目标是使用超文本传输协议请求从UBNT无线电设备(https://www.ubnt.com/)获取状态数据。web界面url被格式化为http://192.168.0.120/status.cgi。发出请求需要身份验证cookie。使用从现有web界面复制的cookie,我能够成功检索数据。

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

代码语言:javascript
复制
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);
    })
})

上面的代码成功地实现了这两个请求。但是,服务器使用错误的令牌("set-cookie“字符串)来响应第一个令牌。使用现有web框架中的cookie,响应是正确的。

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

我认为我的问题出在HTTP请求和web api不与用户名和密码合作。

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-24 11:21:33

对url的直接POST请求不是推荐的方式。当你打开一个浏览器时,你并不是直接登录。获取页面,然后提交/登录

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49185397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档