Ruby Curb gem - Ubiquiti mPower HTTP API

时间:2016-03-12 01:29:44

标签: ruby http curl curb

我正在尝试使用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之外,还有更好的工具来完成这项任务吗?

1 个答案:

答案 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,但如果响应完全与您在那里展示的那样,这应该有效。