Net::HTTP - POST and GET in the same request

I have a peculiar problem where I need to submit POST data to a script
which has get variables (script.asp?variable=true)

But Net:HTTP seems to have gone to great lengths to prevent this.
Obviously, its messy and looked down upon but unfortunately I cannot
control this.

Running tests:

body =
Net::HTTP.post_form(URI.parse(‘http://www.server.net/post.php?x=y’),
{‘A’=>‘1’,‘B’=>‘2’,‘C’ => ‘3’})

puts body.body


Above, the POST variables are the only ones which hit the server.
Apparently everything after the ‘?’ is totally ignored. Please help!

On 25 May 2007, at 22:15, [email protected] wrote:

Net::HTTP.post_form(URI.parse(‘http://www.server.net/post.php?x=y’),
Posted via http://www.ruby-forum.com/.

Try the following:

http = Net::HTTP.new(‘http://www.server.net’)
response = http.post(‘/post.php’, ‘x=y’, {‘A’=>‘1’,‘B’=>‘2’,‘C’ =>
‘3’})

puts response.body

Hope it helps!


Enrique Comba R.
[email protected]

I always thought Smalltalk would beat Java, I just didn’t know it
would be called ‘Ruby’ when it did.
– Kent Beck

Enrique Comba R. wrote:

Try the following:

http = Net::HTTP.new(‘http://www.server.net’)
response = http.post(‘/post.php’, ‘x=y’, {‘A’=>‘1’,‘B’=>‘2’,‘C’ =>
‘3’})

puts response.body

The x=y become POST variables and the {‘A’=>‘1’ …} drop out of the
equation entirely.

Actual code:

http = Net:HTTP.new(domain.com)
response = http.post(script.asp,‘x=y’,{‘A’=>‘1’,‘B’=>‘2’})
content = response.body

Perhaps I have misapplied it?

Note: including http:// in the domain gives a connection error,
strangely.

Note: including http:// in the domain gives a connection error,
strangely.

That is true, my typo…

OOOOPsssss I’m sorry, my fault!

Try this:
http = Net::HTTP.new(‘domain.com’)
response = http.post(‘/script.asp’, ‘x=y’)
content = response.body

The {} sets header fields if you take a closer look at the post
request itself you will see them there.

Cheers,

Enrique Comba R.
[email protected]

I always thought Smalltalk would beat Java, I just didn’t know it
would be called ‘Ruby’ when it did.
– Kent Beck

Enrique Comba R. wrote:

Try this:
http = Net::HTTP.new(‘domain.com’)
response = http.post(‘/script.asp’, ‘x=y’)
content = response.body

The {} sets header fields if you take a closer look at the post
request itself you will see them there.

Now you’ve confused me. The above example doesn’t even contain the
variables I want to send as POST. I need to send x=y as GET and a=1 as
POST. Get it?

In other words: I need to POST ‘a=1’ to ‘script.asp?y=z’

Enrique Comba R. wrote:

Sorry for the confusion… :wink:

Now we’re in business. =) Thanks for your wonderful help, buddy.

On 25 May 2007, at 23:27, Sy Ys wrote:

variables I want to send as POST. I need to send x=y as GET and a=1 as
POST. Get it?

In other words: I need to POST ‘a=1’ to ‘script.asp?y=z’

Okay, then change the following:

response = http.post(’/script.asp?y=z’, ‘a=1’)

Sorry for the confusion… :wink:

On 26 May 2007, at 00:05, Sy Ys wrote:

Enrique Comba R. wrote:

Sorry for the confusion… :wink:

Now we’re in business. =) Thanks for your wonderful help, buddy.

Anytime! :wink: