首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ruby Curb传递GET参数

使用Ruby Curb传递GET参数
EN

Stack Overflow用户
提问于 2011-11-10 06:13:51
回答 4查看 5.1K关注 0票数 4

我正在尝试使用Curb (curb.rubyforge.org)来调用一个需要在get请求中提供参数的RESTful API。

我想获取一个类似于http://foo.com/bar.xml?bla=blablabla的网址。我希望能够做一些像这样的事情

代码语言:javascript
复制
Curl::Easy.perform("http://foo.com/bar.xml", :bla => 'blablabla') {|curl|
    curl.set_some_headers_if_necessary
}

但到目前为止,我能看到的唯一方法是手动将?bla=blablabla包含在URL中,然后自己进行编码。当然,有一种正确的方法可以做到这一点,但我无法从文档中找出答案。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-10 17:26:29

如果你不介意使用ActiveSupport‘URL 3.0',有一个简单的变通方法- to_query方法,它可以将哈希转换为查询字符串,以便在~>中使用。

代码语言:javascript
复制
# 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
}
票数 3
EN

Stack Overflow用户

发布于 2013-08-15 12:48:27

要传递带有ruby路缘gem的get参数,您可以使用

代码语言:javascript
复制
Curl::postalize(params)

此函数实际上回退到路缘gem实现中的URI.encode_www_form(params)。https://github.com/taf2/curb/blob/f89bb4baca3fb3482dfc26bde8f0ade9f1a4b2c2/lib/curl.rb

关于如何使用它的一个例子是

代码语言:javascript
复制
curl = Curl::Easy.new
curl.url = "#{base_url}?#{Curl::postalize(params)}"
curl.perform

要访问curl返回字符串,您可以使用。

代码语言:javascript
复制
data = curl.body_str

第二种选择是

代码语言:javascript
复制
curl = Curl::Easy.new
curl.url = Curl::urlalize(base_url, params)
curl.perform
data = curl.body_str

请注意,Curl::urlalize可能有一些小缺陷,请参阅postalize的这个pull,它修复了这个缺陷,但urlalize仍然使用旧的实现。

票数 7
EN

Stack Overflow用户

发布于 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

代码语言:javascript
复制
Curl::Easy.perform(URI.escape("http://foo.com/bar.xml?bla=blablabla").to_s) {|curl|
    curl.set_some_headers_if_necessary
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8072502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档