在 ruby 中正确构建 http get 请求

Properly build http get request in ruby

我想使用 ruby 从 API 请求用户信息,所以我正在关注这个 ruby http 作弊 sheet:

http://augustl.com/blog/2010/ruby_net_http_cheat_sheet/

这是我目前使用的:

    #!/usr/bin/ruby
    require "net/http"
    require "uri"

    uri = URI.parse("https://cirrus.app47.com/api/users/obfuscated_userID")
    http = Net::HTTP.new(uri.host, uri.port)
    request = Net::HTTP::Get.new(uri.request_uri)
    request.initialize_http_header({"X-Token" => "obfuscated-TokenString"})
    request.initialize_http_header({"Accept" => "application/json"})

    response = http.request(request)
    puts response.to_s

打印响应给了我 #<Net::HTTPBadRequest:0x007fe37cac2da0> 那么我在构建或执行请求时做错了什么?

你可能想打电话给 response.body

您可以找到 Net::HTTPResponse here

的文档

尝试使用 http 协议而不是 https 发出请求:

uri = URI.parse("http://cirrus.app47.com/api/users/obfuscated_userID")

然后,它应该按预期工作。

此外,尝试像这样检查 responseresponse body

response = http.request(request)
puts response.inspect
puts response.body.inspect

然后,获取您需要的数据:-)

2 项缺失:

  1. 声明正在使用 ssl
  2. 正确的header规范

解决方法如下:

uri = URI.parse("https://cirrus.app47.com/api/users/obfuscated_userID") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true

request = Net::HTTP::Get.new(uri.request_uri) 
request['X-Token'] = "obfuscated-APIToken" 
request['Accept'] = "application/json"

response = http.request(request)