首页 > 解决方案 > 如何在遏制中格式化此 GET?

问题描述

我正在尝试使用某人的 API 来检索数据。这是一个可以正常工作的普通 curl GET:

$ curl -H 'Authorization: Bearer eyJhbGciOiJSUz...' 'https://app.theirsite.com/api/web/call/call-log?q=\{"pageSize":25,"pageIndex":1,"sortBy":"timeConnected","sortDirection":2,"userAccountId":0,"requestorId":0,"companyAccountId":99,"consumerId":null,"ticksSince":636959988000000000,"ticksUntil":636966899990000000,"callStatusId":1\}'

注意转义的括号。

我不能让它在有路边的铁轨上工作。我尝试了各种尝试来格式化“?”之后的参数。在网址中,但没有运气。这是我的最后一次尝试:

params = {"pageSize": 25,
          "pageIndex": 1,
          "sortBy": "timeConnected",
          "sortDirection": 2,
          "userAccountId": 0,
          "requestorId": 0,
          "companyAccountId": 99,
          "consumerId": nil,
          "ticksSince": 636959988000000000,
          "ticksUntil": 636966899990000000,
          "callStatusId": 1}


params_str = JSON[params].to_s
params_str.insert( -2, '\\')

response = Curl.get("https://app.theirsite.com/api/web/call/call-log?q=\\" + params_str ) {|curl|
               curl.headers['Authorization'] = 'Bearer ' + @saved.token
               curl.verbose = true}

授权很好,但他们的服务器响应 500 错误 {"global":["Index was outside the bounds of the array."]}。这是我在发现需要转义括号之前使用直接 curl 命令得到的结果。我还没有弄清楚如何在发送之前获得遏制以提供完整 url 的输出。那会很有帮助。

有什么想法吗。

标签: ruby-on-railscurb

解决方案


好的,不是答案,但我最终放弃了遏制并切换到 Ruby 的 net/http。

使用上面的参数,它看起来像:

uri = URI.parse("https://app.theirsite.com/api/web/call/call-log?q=" + JSON[params])
request = Net::HTTP::Get.new(uri)
request["Authorization"] = 'Bearer ' + @saved.token

req_options = {
  use_ssl: uri.scheme == "https",
}

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end

更长一点,但没有转义字符,现在一切正常。


推荐阅读