From: Dave Thomas Date: 2000-06-07T09:54:24-05:00 Subject: [ruby-talk:03153] Re: Retrieving the hostname and port in net/http Roland Jesse writes: > # now some magic to retrieve the hostname and port resulting out of (1) > # store both in newHostName and newPortNr Well, I don't know if this is the 'official' way, but: require 'net/http' h = Net::HTTP.new(ARGV[0] || 'www.ruby-lang.org', 80) url = ARGV[1] || '/' resp, data = h.get2(url, nil) { |a| } puts "Initial response: #{resp.code}, #{resp.message}" if resp.code == "301" location = resp['location'] location =~ %r{^http://([^/]+)(.*)} host = $1 location = $2 port = 80 if host =~ /(.*):(\d+)/ host = $1 post = $2 end h = Net::HTTP.new(host, port) resp, data = h.get(location, nil) puts "Redirect response: #{resp.code}, #{resp.message}" end puts data The 'get2' methods (and the corresponding post2 and head2) don't throw protocol exceptions, so you can get the information you need. I'm sure there are better ways of parsing the returned URL, but this gives you the idea. btw, the top of ruby-lang.org is actually a Ruby script, which looks at the languages your browser accepts and redirects you to either the English or japanese language sides of the web site.Makes a useful test site for this code. Regards Dave