-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathnet-http-compression.rb
51 lines (47 loc) · 1.33 KB
/
net-http-compression.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Intended to extend the Net::HTTP response object
# and adds support for decoding gzip and deflate encoded pages
#
# Author: Jason Stirk <http://griffin.oobleyboo.com>
# Home: http://griffin.oobleyboo.com/projects/http_encoding_helper
# Created: 5 September 2007
# Last Updated: 23 November 2007
#
# Usage:
#
# require 'net/http'
# require 'http_encoding_helper'
# headers={'Accept-Encoding' => 'gzip, deflate' }
# http = Net::HTTP.new('griffin.oobleyboo.com', 80)
# http.start do |h|
# request = Net::HTTP::Get.new('/', headers)
# response = http.request(request)
# content=response.plain_body # Method from our library
# puts "Transferred: #{response.body.length} bytes"
# puts "Compression: #{response['content-encoding']}"
# puts "Extracted: #{response.plain_body.length} bytes"
# end
#
require 'zlib'
require 'stringio'
class Net::HTTPResponse
# Return the uncompressed content
def plain_body
encoding=self['content-encoding']
content=nil
if encoding then
case encoding
when 'gzip'
i=Zlib::GzipReader.new(StringIO.new(self.body))
content=i.read
when 'deflate'
i=Zlib::Inflate.new
content=i.inflate(self.body)
else
raise "Unknown encoding - #{encoding}"
end
else
content=self.body
end
return content
end
end