Net::HTTP::Put with 302 redirect?


#1

Sorry if this gets double-posted:

Is there any way to get net/http to follow a 302 redirect?

title>302 Found

Found

The document has moved here.

###################

require ‘net/http’

uri = ‘http://foo.bar.com:22010

unless uri = (URI.parse(ARGV.shift) rescue nil)
puts "Usage: #$0 "
exit
end

puts “Sending PUT #{uri.request_uri} to #{uri.host}:#{uri.port}”
Net::HTTP.start(uri.host, uri.port) do |http|
headers = {‘Content-Type’ => ‘text/plain; charset=utf-8’}
put_data = “put payload”
response = http.send_request(‘PUT’, uri.request_uri, put_data,
headers)
puts “Response #{response.code} #{response.message}:
#{response.body}”
end


#2

On Tue, May 22, 2007 at 06:30:03AM +0900, Chris McMahon wrote:

Sorry if this gets double-posted:

Is there any way to get net/http to follow a 302 redirect?

Lots of examples in the source; look for it in
/usr/lib/ruby/1.8/net/http.rb
or somewhere similar on your system.

=== Following Redirection

require ‘net/http’

require ‘uri’

def fetch(uri_str, limit = 10)

# You should choose better exception.

raise ArgumentError, ‘HTTP redirect too deep’ if limit == 0

response = Net::HTTP.get_response(URI.parse(uri_str))

case response

when Net::HTTPSuccess then response

when Net::HTTPRedirection then fetch(response[‘location’],

limit - 1)

else

response.error!

end

end

print fetch(‘http://www.ruby-lang.org’)