From: Gabriele Marrone Date: 2006-11-11T10:25:38+09:00 Subject: Re: Easy way to do a HTTPS POST? On 11/nov/06, at 02:05, gregarican wrote: > For a business banking app I needed to script out something that would > upload a PGP-encrypted text file through a HTTPS POST command. Since > Ruby is my language of choice for quick hitters like this I looked > into > using it for the HTTPS POST part of the puzzle. After googling around > for awhile I didn't run across anything blatantly obvious as a > solution. > > I use the One-Click Installer for Windows version of Ruby 1.8.4 as my > primary development tool. I only saw 'net/http' and not 'net/https' as > valid choices... Net::HTTP does the job. You can see examples on http://www.ruby-doc.org/stdlib/libdoc/net/ http/rdoc/classes/Net/HTTP.html , I'm copypasting here the POST ones: require 'net/http' require 'uri' #1: Simple POST res = Net::HTTP.post_form(URI.parse('http://www.example.com/ search.cgi'), {'q'=>'ruby', 'max'=>'50'}) puts res.body #2: POST with basic authentication res = Net::HTTP.post_form(URI.parse('http:// jack:pass@www.example.com/todo.cgi'), {'from'=>'2005-01-01', 'to'=>'2005-03-31'}) puts res.body #3: Detailed control url = URI.parse('http://www.example.com/todo.cgi') req = Net::HTTP::Post.new(url.path) req.basic_auth 'jack', 'pass' req.set_form_data({'from'=>'2005-01-01', 'to'=>'2005-03-31'}, ';') res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) } case res when Net::HTTPSuccess, Net::HTTPRedirection # OK else res.error! end If you need HTTPS make sure to require 'net/https' and use something like this: #3: Detailed control url = URI.parse('http://www.example.com/todo.cgi') req = Net::HTTP::Post.new(url.path) req.basic_auth 'jack', 'pass' req.set_form_data({'from'=>'2005-01-01', 'to'=>'2005-03-31'}, ';') http = Net::HTTP.new(url.host, url.port) # lines http.use_ssl = true # modified res = http.start {|http| http.request(req) } # by me case res when Net::HTTPSuccess, Net::HTTPRedirection # OK else res.error! end I didn't actually test this code but I think it should work. By the way, it doesn't support cookies as far as I know. In fact I needed a library with which I could interact with a website that needed a session id stored in a cookie (and not encoded within the URL) and I wasn't able to find any. :( -- Gabriele Marrone