我有通过JSON从外部Rails服务器获取资源的方法。一个使用net/http
库,另一个执行curl
。他们的反应不同。
如果我使用net/http
def get_via_nethttp(endpoint, user, password, id)
uri = URI.parse("#{endpoint}/items/#{id}.json")
http = Net::HTTP.new(uri.host, uri.port)
headers = {
'Content-Type' => 'application/json',
'Accept-Encoding' => 'gzip,deflate',
'Accept' => 'application/json'
}
request = Net::HTTP::Get.new(uri.request_uri, headers)
request.basic_auth(user, password)
http.request(request)
end
然后返回码是ASCII-8Bit编码的。这是一个片段:
\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x03\xBDWmo\xE28\x10\xFE+Vv\xA5...
但是,如果我使用curl
def get_via_curl(endpoint, user, password, id)
%x(curl -u #{user}:#{password} #{endpoint}/items/#{id}.json)
end
然后JSON字符串返回
"{\"id\":1234,\"title\":\"Foo\"}"
我尝试了多种方法来解码net/http
的输出无济于事。最后,我只想要JSON字符串,所以我最终选择了curl
。造成这种情况的区别是什么?
答案 0 :(得分:1)
标题'Accept-Encoding' => 'gzip,deflate'
中的设置可能会导致服务器向您发送分块响应。只需删除它。