2012-05-01 20 views
2

私はpythonでhttpリクエストを送信するいくつかのコードを持っていますが、私のサーバはレールであるため、Rubyでどうやって行うのかを調べようとしています。urllib2 in ruby​​ 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、それはアプリケーションに/ x-www-form-urlencodedでデータを応答するかのようにあなたは、リモートサーバーを呼び出している、実際にそれだけに応えていますが、

答えて

3

ポストボディのコマンド。

Pythonでは、urllib2.urlopenのデータパラメータには、application/x-www-form-urlencodedの文字列が必要です。

select *は本当にいわばエンコード形成されていないが、サーバーはNone値とselect *名前付きクエリの引数として解釈されているので、それはとにかくあなたのために働いている、またはより正確に、サーバは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) 
+0

いい説明! –

関連する問題