ruby的python等价物中的urllib2

ruby的python等价物中的urllib2,python,ruby-on-rails,ruby,Python,Ruby On Rails,Ruby,我用python编写了一些代码,用python发送http请求,但由于我的服务器是rails,所以我正在尝试用ruby实现这一点 import urllib2, sys, json url = "http://new.openbms.org/backend/api/query" query = "select *" fp = urllib2.urlopen(url, data=query) obj = json.load(fp) json.dump(obj, sys.stdout, sort_

我用python编写了一些代码,用python发送http请求,但由于我的服务器是rails,所以我正在尝试用ruby实现这一点

import urllib2, sys, json

url = "http://new.openbms.org/backend/api/query"
query = "select *"
fp = urllib2.urlopen(url, data=query)
obj = json.load(fp)
json.dump(obj, sys.stdout, sort_keys=True, indent=2)
这段python代码实际上返回了我所期望的结果,但当我尝试在ruby中执行相同的操作时,我得到了一个错误的请求

require 'net/http'

query = "select *"
url = "http://new.openbms.org/backend/api/query"
uri = URI(url)
p Net::HTTP.post_form(uri, { "data" => query })
上面这张是打印出来的
#
。请帮忙,谢谢

Python版本2.7.1
Ruby 1.9.2p318版

尽管您调用远程服务器时好像它响应application/x-www-form-urlencoded数据,但实际上它只是响应post正文中的命令

在Python中,urllib2.urlopen的数据参数需要一个
application/x-www-form-urlencoded
字符串

可以说,
select*
并不是真正的表单编码,但它对您仍然有效,因为服务器将其解释为名为
select*
的查询参数,带有
None
值,或者更准确地说,服务器看到一个带有
select*
的帖子主体,并说“我知道如何响应该命令”

所以,这里有一个Ruby等价于您正在做的事情

require 'net/http'
require 'json'

query = "select *"
url = "http://new.openbms.org/backend/api/query"
uri = URI(url)
response = Net::HTTP.post_form(uri, { query => nil })
puts JSON.parse(response.body)

尽管您调用远程服务器时,好像它响应application/x-www-form-urlencoded数据,但实际上它只是响应post主体中的命令

在Python中,urllib2.urlopen的数据参数需要一个
application/x-www-form-urlencoded
字符串

可以说,
select*
并不是真正的表单编码,但它对您仍然有效,因为服务器将其解释为名为
select*
的查询参数,带有
None
值,或者更准确地说,服务器看到一个带有
select*
的帖子主体,并说“我知道如何响应该命令”

所以,这里有一个Ruby等价于您正在做的事情

require 'net/http'
require 'json'

query = "select *"
url = "http://new.openbms.org/backend/api/query"
uri = URI(url)
response = Net::HTTP.post_form(uri, { query => nil })
puts JSON.parse(response.body)