box-o-sand/cookbook/014/03.rb
2011-07-25 22:09:21 -04:00

65 lines
1.8 KiB
Ruby

require 'net/http'
require 'uri'
# A simple wrapper method that accepts either strings or URI objects
# and performs an HTTP GET.
module Net
class HTTP
def HTTP.get_with_headers(uri, headers=nil)
uri = URI.parse(uri) if uri.respond_to? :to_str
start(uri.host, uri.port) do |http|
return http.get(uri.path, headers)
end
end
end
end
# Let's get a web page in German.
res = Net::HTTP.get_with_headers('http://www.google.com/',
{'Accept-Language' => 'de'})
# Check a bit of the body to make sure it's really in German
s = res.body.size
puts 'part of body in german=' + res.body[s-3670..s-3470].to_s
Net::HTTP.get_with_headers('http://www.google.com/',
{'User-Agent' => 'Ruby Web Browser v1.0'})
uncompressed = Net::HTTP.get_with_headers('http://www.cnn.com/')
puts 'uncompressed body size=' + uncompressed.body.size.to_s
gzipped = Net::HTTP.get_with_headers('http://www.cnn.com/',
{'Accept-Encoding' => 'gzip'})
puts 'gzipped Content-Encoding=' + gzipped['Content-Encoding']
puts 'gzipped body size=' + gzipped.body.size.to_s
require 'zlib'
require 'stringio'
body_io = StringIO.new(gzipped.body)
unzipped_body = Zlib::GzipReader.new(body_io).read()
puts 'unzipped body size=' + unzipped_body.size.to_s
uri = URI.parse('http://www.google.com/')
request = Net::HTTP::Get.new(uri.path)
['en_us', 'en', 'en_gb', 'ja'].each do |language|
request.add_field('Accept-Language', language)
end
puts 'request[\'Accept-Language\']=' + request['Accept-Language'].to_s
Net::HTTP.start(uri.host, uri.port) do |http|
response = http.request(request)
puts 'response[\'Content-Type\']=' + response['Content-Type']
puts 'response headers:'
response.each_key do |key|
puts " #{key}"
end
end