使用rest-client更正get请求的语法

时间:2012-07-13 23:09:15

标签: ruby rest-client

现在我可以按如下方式提出请求:

user = 'xxx'  
token = 'xxx'  
survey_id = 'xxx'  
response = RestClient.get "https://survey.qualtrics.com/WRAPI/ControlPanel/api.php?Request=getLegacyResponseData&User=#{user}&Token=#{token}&Version=2.0&SurveyID=#{survey_id}&Format=XML"

但应该有一些更好的方法来做到这一点。我尝试过这样的事情:

response = RestClient.get "https://survey.qualtrics.com/WRAPI/ControlPanel/api.php", :Request => 'getLegacyResponseData', :User => user, :Token => token, :Version => '2.0', :SurveyID => survey_id, :Format => 'XML'</code>

及其变体(字符串代替键的符号,包括{和},使键小写等)但我尝试的组合似乎都没有效果。这里的语法是什么?


我尝试了下面的第一个建议。它没用。为了记录,这有效:

surveys_from_api = RestClient.get "https://survey.qualtrics.com/WRAPI/ControlPanel/api.php?Request=getSurveys&User=#{user}&Token=#{token}&Version=#{version}&Format=JSON"

但这不是:

surveys_from_api = RestClient.get "https://survey.qualtrics.com/WRAPI/ControlPanel/api.php", :params => {:Request => 'getSurveys', :User => user, :Token => token, :Version => version, :Format => 'JSON'}

(我设置了 version ='2.0')。

4 个答案:

答案 0 :(得分:11)

您需要使用符号:params指定查询字符串参数。否则它们将被用作标题。

params示例:

response = RestClient.get "https://survey.qualtrics.com/WRAPI/ControlPanel/api.php", :params => {:Request => 'getLegacyResponseData', :User => user, :Token => token, :Version => '2.0', :SurveyID => survey_id, :Format => 'XML'}

答案 1 :(得分:3)

我遇到了与Rest-Client(1.7.2)相同的问题 我需要将params和HTTP标头都放在一起。

我用这种语法解决了:

params = {id: id, device: device, status: status}
headers = {myheader: "giorgio"}

RestClient.put url, params, headers

我讨厌RestClient: - )

答案 2 :(得分:1)

rest-client api docs中,我看到headersHash,如果您想同时提供 - 标头和参数,那么您需要在:params内使用headers密钥 headers = { h1 => v1, h2 => v2, :params => {my params} } 哈希。 e.g。

{{1}}

答案 3 :(得分:0)

您真正需要的是URI.encode_www_form()方法。

uri = URI("https://survey.qualtrics.com/WRAPI/ControlPanel/api.php")
request_params = {
  Request: 'getLegacyResponseData',
  ...
}
uri.query = URI.encode_www_form(request_params)
response = RestClient.get(uri.to_s)