urthon中的urllib2相当于ruby

我在python中有一些代码在python中发送一个http请求,但我试图弄清楚如何在ruby中执行它,因为我的服务器是rails。

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的data参数需要一个string application/x-www-form-urlencoded的字符串。

select *不是真正的表单编码可以这么说,但无论如何它都适合你,因为服务器将它解释为一个名为select *的查询参数,带有None值,或者更准确地说,服务器看到一个带有select *的post体说“我知道如何回应这个命令”。

所以,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)