ruby-on-rails - 如何在遏制中格式化此 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 的 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
更长一点,但没有转义字符,现在一切正常。
推荐阅读
- r - ggplot2:无效输入:使用 scale_x_datetime 时的 time_trans
- reactjs - ReactJS - 显示列名
- mule-studio - 在dataweave中转换日期时间格式
- rust - Cargo 的 build 和 rustc 命令有什么区别?
- r - 即使使用 DPLYR 包中的 SELECT 列存在,也无法对列进行子集化
- mysql - 加入和分组 concat mysql 查询未按预期工作
- graphql - 如何转换从@apollo/react-hooks 接收到的数据
- java - 超过时间限制,我正在尝试使用链表使用 java 堆栈删除字符串中的重复项
- node.js - 断言对象的每个键都是一个数组
- ruby-on-rails - 确定日期/时间字符串中是否存在时间值