How to POST Form Data Using Ruby

來源:互聯網
上載者:User

From http://biodegradablegeek.com/2008/04/how-to-post-form-data-using-ruby/

POSTing data on web forms is essential for writing tools and services that interact with resources already available on the web. You can grab information from your Gmail account, add a new thread to a forum from your own app, etc.

The following is a brief example on how this can be done in Ruby using Net::HTTPand this POST form example.

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

view source
<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 Ruby code:

view source
#!/usr/bin/rubyrequire "uri"require "net/http"params = {'box1′ => '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′ => '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:

view source
<form method="POST" action="formpost.asp"><p><input type="text" name="box1″ size="20″ value="NOTHING IS LESSIMPORTANT THAN WHICH FORK YOU USE. ETIQUETTE IS THESCIENCE OF LIVING. IT EMBRACES EVERYTHING. IT IS ETHICS.IT IS HONOR. -EMILY POST"><input type="submit" value="Submit" name="button1″></p></form>
In practice, you might want to use a more specialized library to handle what you’re doing. Be sure to check out Mechanize and Rest-client.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.