繁体   English   中英

Ruby GET 响应正文编码?

[英]Ruby GET response body encoded?

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

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

"\\\x8B\\b\\\\\\\\\x8A\\x8E\\\\\\xFF\\xFF\\u000r\\u000r\\\xFF\\xFF\\u000r \\" 这就是我得到的 response.body。 响应头是 200(所以应该没问题?)

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

编辑:问题是 Ruby 默认编码覆盖了响应中发送的编码标头。 这可以通过添加“接受编码”来解决

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

在我看来,您的回复已被压缩。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM