使用Ruby Curb传递GET参数

And*_*one 4 ruby rest curl ruby-on-rails libcurl

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

我想要获取像这样的URL http://foo.com/bar.xml?bla=blablabla.我希望能够做类似的事情

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

但到目前为止,我能看到的唯一方法是手动?bla=blablabla将URL 包括在内并自己进行编码.当然有一种正确的方法可以做到这一点,但我无法弄清楚阅读文档.

小智 7

使用你可以使用的ruby curb gem传递get参数

Curl::postalize(params)
Run Code Online (Sandbox Code Playgroud)

这个函数实际上回退到curb 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
Run Code Online (Sandbox Code Playgroud)

要访问您可以使用的curl返回字符串.

data = curl.body_str
Run Code Online (Sandbox Code Playgroud)

第二种选择是

curl = Curl::Easy.new
curl.url = Curl::urlalize(base_url, params)
curl.perform
data = curl.body_str
Run Code Online (Sandbox Code Playgroud)

请注意,卷曲:: urlalize可能会略有瑕疵看到这种拉动对postalize有修复此漏洞,但仍然urlalize使用旧的实现.