我正在尝试使用this为Ubiquiti的mPower设备复制Curb gem HTTP API,并将此输出存储到CSV文件中。
使用cURL:
curl -X POST -d "username=user&password=pass" -b "AIROS_SESSIONID=01234567890123456789012345678901" 192.168.1.75/login.cgi
curl -b "AIROS_SESSIONID=01234567890123456789012345678901" 192.168.1.75/sensors/1/power
返回:
{"sensors":[{"power":2.740736961}],"status":"success"}
我尝试使用Curb:
require 'curb'
cookie = rand(36**32).to_s(36)
curl = Curl::Easy.new('http://192.168.1.75/login.cgi')
curl.http_post(
Curl::PostField.content('username', 'user'),
Curl::PostField.content('password', 'pass'))
curl = Curl::Easy.new('http://192.168.1.75/sensors/1/power')
curl.cookies = cookie
curl.perform
在脚本末尾添加puts curl.perform
会打印true
。
使用cURL,我通常可以在响应出现之前从命令行执行curl -b...
之间的1-3秒延迟数据。如何使用Curb实现相同的结果并将仅功率数据保存到局部变量?除了Curb之外,还有更好的工具来完成这项任务吗?
答案 0 :(得分:0)
我会使用JSON
模块解析结果。
require 'curb'
require 'json'
curl = Curl::Easy.new('http://192.168.1.75/login.cgi')
curl.cookies = "AIROS_SESSIONID=#{rand(36**32).to_s(36)}"
curl.http_post(
Curl::PostField.content('username', 'user'),
Curl::PostField.content('password', 'pass'))
curl.url = 'http://192.168.1.75/sensors/1/power'
curl.perform
result_hash = JSON.parse(curl.body_str)
power = result_hash["sensors"][0]["power"] #=> should get 2.740736961
无法对其进行测试,因为我没有实施您的API,但如果响应完全与您在那里展示的那样,这应该有效。