现在我可以按如下方式提出请求:
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')。
答案 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中,我看到headers
是Hash
,如果您想同时提供 - 标头和参数,那么您需要在: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)