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