# Post form example

**URL:** <https://www.ruby-forum.com/t/post-form-example/195027>\
**Category:** Rails\
**Created:** [September 15, 2010, 3:04pm UTC](https://www.ruby-forum.com/t/post-form-example/195027 "2010-09-15T15:04:21Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Crooksey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/898d66/32.png) [@Crooksey](https://www.ruby-forum.com/u/Crooksey)\
**Post date:** [September 15, 2010, 3:04pm UTC](https://www.ruby-forum.com/t/post-form-example/195027/1 "2010-09-15T15:04:21Z")

</div>

Im looking for a very very basic POST form that will post data to an  
external website with Net:http

I wonder if anyone has created one they could share?

---

<div class="post-metadata">

**Author:** ![Crooksey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/898d66/32.png) [@Crooksey](https://www.ruby-forum.com/u/Crooksey)\
**Post date:** [September 15, 2010, 6:38pm UTC](https://www.ruby-forum.com/t/post-form-example/195027/2 "2010-09-15T18:38:37Z")

</div>

> Im looking for a very very basic POST form that will post data to an  
> external website with Net:http
> 
> I wonder if anyone has created one they could share?

From…  
[http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html](http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html)

Posting Form Data

```
require 'net/http'
require 'uri'

#1: Simple POST
res = 

```

Net::HTTP.post\_form(URI.parse(‘[http://www.example.com/search.cgi](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:removed\_email\_address@domain.invalid/todo.cgi](http://jack:removed_email_address@domain.invalid/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

Or did you mean something else?

-philip

---

<div class="post-metadata">

**Author:** ![Crooksey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/898d66/32.png) [@Crooksey](https://www.ruby-forum.com/u/Crooksey)\
**Post date:** [September 15, 2010, 7:04pm UTC](https://www.ruby-forum.com/t/post-form-example/195027/3 "2010-09-15T19:04:23Z")

</div>

This is what I have used a few times. Error handling my own.

def self.post\_data(url, post\_data)  
resp = “”  
begin  
url = URI.parse(url)  
http = Net::HTTP.new(url.host, url.port)  
http.use\_ssl = true if url.port == 443  
http.start do |http|  
req = Net::HTTP::Post.new(url.path)  
req.set\_body\_internal(post\_data)  
response = http.request(req)  
resp = response.body  
end  
rescue Exception =\> e  
@response\_error = e  
error = SystemError.new(:user\_id =\> nil,  
:account\_id =\> nil,  
:location =\> “GlobalFunctions.post\_data”,  
:error =\> “#{e}”,  
:incidentals =\> {“url” =\> url,  
“post\_data” =\> post\_data}  
).save  
end  
resp  
end

---

<div class="post-metadata">

**Author:** ![Crooksey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/898d66/32.png) [@Crooksey](https://www.ruby-forum.com/u/Crooksey)\
**Post date:** [September 15, 2010, 7:47pm UTC](https://www.ruby-forum.com/t/post-form-example/195027/4 "2010-09-15T19:47:29Z")

</div>

Crooksey wrote:

> Im looking for a very very basic POST form that will post data to an  
> external website with Net:http

You don’t need Net::HTTP to do that. Just set the form’s action to an  
external URL.

> I wonder if anyone has created one they could share?

## Best,

Marnen Laibow-Koser  
[http://www.marnen.org](http://www.marnen.org)  
removed\_email\_address@domain.invalid
