我正在尝试使用Curb (curb.rubyforge.org)来调用一个需要在get请求中提供参数的RESTful API。
我想获取一个类似于http://foo.com/bar.xml?bla=blablabla的网址。我希望能够做一些像这样的事情
Curl::Easy.perform("http://foo.com/bar.xml", :bla => 'blablabla') {|curl|
curl.set_some_headers_if_necessary
}但到目前为止,我能看到的唯一方法是手动将?bla=blablabla包含在URL中,然后自己进行编码。当然,有一种正确的方法可以做到这一点,但我无法从文档中找出答案。
发布于 2011-11-10 17:26:29
如果你不介意使用ActiveSupport‘URL 3.0',有一个简单的变通方法- to_query方法,它可以将哈希转换为查询字符串,以便在~>中使用。
# 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
}发布于 2013-08-15 12:48:27
要传递带有ruby路缘gem的get参数,您可以使用
Curl::postalize(params)此函数实际上回退到路缘gem实现中的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要访问curl返回字符串,您可以使用。
data = curl.body_str第二种选择是
curl = Curl::Easy.new
curl.url = Curl::urlalize(base_url, params)
curl.perform
data = curl.body_str请注意,Curl::urlalize可能有一些小缺陷,请参阅postalize的这个pull,它修复了这个缺陷,但urlalize仍然使用旧的实现。
发布于 2011-11-10 08:27:09
简单地将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
}https://stackoverflow.com/questions/8072502
复制相似问题