【问题标题】:How can I get the response of request of API on ruby?如何获得对 ruby​​ 的 API 请求的响应?
【发布时间】:2021-05-18 08:58:19
【问题描述】:

我目前正在做一个项目,我必须制定一个特定的方法。 通过使用这种方法,我想得到 Json 的结果。 url 完全没问题,当我通过 Curl -get 命令点击它时它返回 Json。 它返回这样的东西 [{id: "~~~", name: "~~~"}, {id: "===", name: "==="}]

  def api(url)
    uri = URI.parse(url)
    req = Net::HTTP::Get.new(uri.request_uri)
    https = Net::HTTP.new(uri.host, uri.port)
    https.use_ssl = true
    res = https.request(req)
    res.to_json ( i also tried res.body)
  end

我想解决这个问题,但我没有发现问题。

*已添加

我刚刚发现 res = https.request(req) 不起作用。 print res 什么也不返回。

在这堂课中,我添加了这些要求,但这里可能有问题。

  require 'json'
  require 'net/http'
  require 'uri'

【问题讨论】:

    标签: ruby-on-rails json ruby


    【解决方案1】:

    您可以解析响应正文:

    JSON.parse(res.body)
    

    在纯 IRB 会话中从 JSONPlacehoder 服务获取结果的示例。

    irb(main):001:0> require 'json'
    => true
    irb(main):002:0>   require 'net/http'
    => true
    irb(main):003:0>   require 'uri'
    => false
    irb(main):004:1* def api(url)
    irb(main):005:1*   uri = URI.parse(url)
    irb(main):006:1*   req = Net::HTTP::Get.new(uri.request_uri)
    irb(main):007:1*   https = Net::HTTP.new(uri.host, uri.port)
    irb(main):008:1*   https.use_ssl = true
    irb(main):009:1*   res = https.request(req)
    irb(main):010:1*   JSON.parse(res.body)
    irb(main):011:0> end
    => :api
    irb(main):012:0> url = 'https://jsonplaceholder.typicode.com/todos'
    irb(main):013:0> api(url)
    => [{"userId"=>1, "id"=>1, "title"=>"delectus aut autem", "completed"=>false}, {"userId"=>1, "id"=>2, "title"=>"quis ut nam facilis et officia qui", "completed"=>false}, {"userId"=>1, "id"=>3, "title"=>"fugiat veniam minus", "completed"=>false}]
    

    【讨论】:

    • 感谢您的评论,但不知何故我无法得到结果。这部分好像不行res = https.request(req)
    • 效果很好,请查看我的更新。您使用的 URL 可能存在其他问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多