我的目标是使用超文本传输协议请求从UBNT无线电设备(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);
})
})
上面的代码成功地实现了这两个请求。但是,服务器使用错误的令牌("set-cookie“字符串)来响应第一个令牌。使用现有web框架中的cookie,响应是正确的。
这里有一个用Python编写的库,我相信它可以做类似的事情。https://github.com/zmousm/ubnt-nagios-plugins
我认为我的问题出在HTTP请求和web api不与用户名和密码合作。
提前感谢您的帮助。
发布于 2018-03-24 11:21:33
对url的直接POST
请求不是推荐的方式。当你打开一个浏览器时,你并不是直接登录。获取页面,然后提交/登录
不模拟此行为可能会影响某些站点,具体取决于服务器的工作方式。
因此,如果总是想要像真实用户/浏览器那样查看模拟,首先发出GET
请求,然后发出POST
。
还可以捕获第一个GET
请求中的所有cookie,然后将其传递给下一个请求
https://stackoverflow.com/questions/49185397
复制相似问题