2011-11-09 22 views
4

Curb(curb.rubyforge.org)を使用して、get要求で指定されたパラメータを必要とするRESTful APIを呼び出そうとしています。Ruby CurbでGETパラメータを渡す

http://foo.com/bar.xml?bla=blablablaのようなURLを取得したいとします。私は

Curl::Easy.perform("http://foo.com/bar.xml", :bla => 'blablabla') {|curl| 
    curl.set_some_headers_if_necessary 
} 

ような何かをできるようにしたいと思いますが、これまでのところ、私はこれを行うには見ることができる唯一の方法は、手動でURLで?bla=blablabla含むとエンコーディングを自分で行うことです。確かにこれを行う正しい方法がありますが、私はそれをドキュメントを読んで理解することはできません。

答えて

3

ActiveSupport '〜> 3.0'を使用しても構わない場合は、簡単な回避策があります。to_queryメソッドは、ハッシュをURLで使用できるように準備したクエリ文字列に変換します。

# active_support cherry-pick 
require 'active_support/core_ext/object/to_query' 

params = { :bla => 'blablabla' } 

Curl::Easy.perform("http://foo.com/bar.xml?" + params.to_query) {|curl| 
    curl.set_some_headers_if_necessary 
} 
0

URIエスケープURLをperform(http_get)メソッドに渡すのはどうですか?

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/URI/Escape.html

Curl::Easy.perform(URI.escape("http://foo.com/bar.xml?bla=blablabla").to_s) {|curl| 
    curl.set_some_headers_if_necessary 
} 
+0

さて、疑問符と等号もエスケープされます。とにかく、これらは名前付きのパラメータであり、それらを渡す標準的な(そして最も読みやすい)方法はハッシュパラメータです。だから私はむしろそれをしたいと思います。 –

1

を参照してください。あなたが別の宝石を検討したことがありますか? rest-clientはかなりうまく機能し、あなたが行うことができます:。。私はあなたがカーブについて尋ね実現私はカーブでの経験を持っていない

RestClient.get 'http://example.com/resource', {:params => {:id => 50, 'foo' => 'bar'}} 

(、申し訳ありません休む-クライアントは、私はそれを使用したすべての時間はかなり信頼性の高いされています)。

7

あなたは

Curl::postalize(params) 

にこの機能を使用することができルビー縁石の宝石とパラメータを取得渡すには、実際には縁石の宝石の実装に戻っURI.encode_www_form(のparams)に下がります。 https://github.com/taf2/curb/blob/f89bb4baca3fb3482dfc26bde8f0ade9f1a4b2c2/lib/curl.rb

これはあなたが使用することができカールリターン文字列にアクセスするには

curl = Curl::Easy.new 
curl.url = "#{base_url}?#{Curl::postalize(params)}" 
curl.perform 

だろう使用する方法の例。

data = curl.body_str 

第二の選択肢は

curl = Curl::Easy.new 
curl.url = Curl::urlalize(base_url, params) 
curl.perform 
data = curl.body_str 

カールは:: urlalizeはこの欠陥を修正しているが、urlalizeはまだ古い実装を使用していますpostalizeこのpullを参照してください少し欠陥があるかもしれないことに注意してくださいだろう。

関連する問題