3
class ResponseParser < Excon::Middleware::Base
4
def response_call(datum)
5
unless datum.has_key?(:response)
6
datum = Excon::Response.parse(datum[:connection].send(:socket), datum)
8
# only requests without a :response_block add 'deflate, gzip' to the TE header.
9
unless datum[:response_block]
10
if key = datum[:response][:headers].keys.detect {|k| k.casecmp('Transfer-Encoding') == 0 }
11
encodings = Utils.split_header_value(datum[:response][:headers][key])
12
if encoding = encodings.last
13
if encoding.casecmp('deflate') == 0
14
# assume inflate omits header
15
datum[:response][:body] = Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(datum[:response][:body])
17
elsif encoding.casecmp('gzip') == 0 || encoding.casecmp('x-gzip') == 0
18
datum[:response][:body] = Zlib::GzipReader.new(StringIO.new(datum[:response][:body])).read
21
datum[:response][:headers][key] = encodings.join(', ')
26
@stack.response_call(datum)