Ruby GET 响应 body 已编码?

Ruby GET response body encoded?

嘿,我正在尝试让 API 请求正常工作,但不知何故 Ruby GET 搞砸了。我是 运行 docker 容器中的应用程序,当我在容器内使用 curl 时,它 returns 是正确的值。这是我的代码:

class StatisticsController < ApplicationController
  def index
    @group = Group.find(params[:statistic_group_id])
    @devices = @group.devices
    pids = @devices.map{|d| d.hwg['pid']}.uniq
    pid = {'pid' => pids}
    get(pid)
  end

  def get(params)

    require 'net/http' 
    require 'uri'

    password = "something"
    user =  "something"

    url = URI( "something").tap do |uri|
        uri.query = URI.encode_www_form(params)
    end
    https = Net::HTTP.start(url.host, url.port, use_ssl: url.scheme == 'https')
    request = Net::HTTP::Get.new(url, 'Content-Type' => 'application/json')
    request.basic_auth(user, password)
    response = https.request(request)
    @body = response.body
  end
end

"\u001F\x8B\b\u0000\u0000\u0000\u0000\u0000\u0000\u0003\x8A\x8E\u0005\u0000\u0000\u0000\xFF\xFF\u0003\u0000)\xBBL\r\u0002\u0000\u0000\u0000" 这就是我得到的 response.body。响应 header 是 200(所以应该没问题?)

这是我应该得到的 [](空 json 数组)。 url 似乎已成功创建(因为如果我一个一个地执行命令,当我从控制台粘贴它时它会起作用)。老实说,我不知道哪里出了问题。

编辑: 问题是 Ruby 默认编码覆盖了响应中发送的编码 header。这可以通过添加“Accept-Encoding”

来解决
request = Net::HTTP::Get.new(url, 'Content-Type' => 'application/json', 'Accept-Encoding' => 'utf-8')

在我看来,您的回复是压缩过的。