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')
在我看来,您的回复是压缩过的。
嘿,我正在尝试让 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')
在我看来,您的回复是压缩过的。