A A
RSS

How to POST Form Data Using Ruby

Thu, Apr 24, 2008

Code example, Coding, Ruby, Snippets

POST data HTTP

Being able to post data on web forms from your own apps will give you the ability to write tools, services,and provide automation, by interacting with resources already available on the web. This is a very brief example on how this can be accomplished in Ruby, using Net::HTTPand this POST form example.

Looking at the source (interlacken.com/webdbdev/ch05/formpost.asp):

<form method=“POST” action=“formpost.asp”>
  <p><input type=“text” name=“box1″ size=“20″ value=“”>
  <input type=“submit” value=“Submit” name=“button1″></p>
</form>

We see two attributes are sent to the formpost.asp script when the user hits the submit button: A textbox named box1 and the value of the submit button, named Submit. If this form used a GET method, we would just fetch the URL postfixed with (for example) ?box1=our+text+here. Fortunately, Ruby’s Net::HTTP makes posting data just as easy.

The postpost.rb file (call it whatever you want):

#!/usr/bin/ruby
 
require "uri"
require "net/http"
 
params = {'box1' =&gt; 'Nothing is less important than which fork you use. Etiquette is the science of living. It embraces everything. It is ethics. It is honor. -Emily Post',
'button1' =&gt; 'Submit'
}
x = Net::HTTP.post_form(URI.parse('http://www.interlacken.com/webdbdev/ch05/formpost.asp'), params)
puts x.body
 
# Uncomment this if you want output in a file
# File.open('out.htm', 'w') { |f| f.write x.body }

Sending the value of button1 is optional in this case, but sometimes this value is checked in the server side script. One example is when the coder wants to find out if the form has been submitted - as opposed to it being the user’s first visit to the form - without creating a hidden attribute to send along w/ the other form fields. Besides, there’s no harm in sending a few more bytes.

If you’re curious about URI.parse, it simply makes the URI easier to work with by separating and classifying each of its attributes, effectively letting the methods in Net::HTTP do their sole job only, instead of having to analyze and parse the URL. More info on this in the Ruby doc.

Assuming no errors, running this example (ruby postpost or chmod a+x postpost.rb; ./postpost.rb) yields:

<form method="POST" action="formpost.asp">
  <p><input type="text" name="box1" size="20" value="NOTHING IS LESS
IMPORTANT THAN WHICH FORK YOU USE. ETIQUETTE IS THE
SCIENCE OF LIVING. IT EMBRACES EVERYTHING. IT IS ETHICS.
IT IS HONOR. -EMILY POST">
  <input type="submit" value="Submit" name="button1"></p>
</form>

Tags: , , , ,

Leave a Reply