From: Jano Svitok Date: 2007-07-01T07:47:58+09:00 Subject: Re: post_form not posting to full url On 6/30/07, Pat Goebel wrote: > I am using Net::HTTP.post_form to post this form information: > { "form_action" => "pet.do_fight", "mcid" => "9", "level" => "30", > "type" => "fightmonster" } > to this url: > http://neo2.hotornot.com/facebook/pet/?fb_sig_in_iframe=1&fb_sig_time=1183152280.7875&fb_sig_user=502275480&fb_sig_profile_update_time=1182829280&fb_sig_session_key=4ca41050eb103deabc95c2c5-502275480&fb_sig_expires=0&fb_sig_api_key=692cc73d766279a46f0aaac1d104771e&fb_sig_added=1&fb_sig=c9a69599141dd3a1f4b81f46fc52ffb2&cpid=560252&msg= > and while it should be posting to this url when I used a packet sniffer > (because it was not working) it showed me that it was posting only to > this url: > http://neo2.hotornot.com/facebook/pet/ > it gives me a 404: > >
Sorry! This page cannot be found
> as well as giving me: > # > ...what am i doing wrong: > ------------------- > require 'net/http' > require 'uri' > spooform = { "form_action" => "pet.do_fight", "mcid" => "9", "level" => > "30", "type" => "fightmonster" } > fightit = > "http://neo2.hotornot.com/facebook/pet/?fb_sig_in_iframe=1&fb_sig_time=1183152280.7875&fb_sig_user=502275480&fb_sig_profile_update_time=1182829280&fb_sig_session_key=4ca41050eb103deabc95c2c5-502275480&fb_sig_expires=0&fb_sig_api_key=692cc73d766279a46f0aaac1d104771e&fb_sig_added=1&fb_sig=c9a69599141dd3a1f4b81f46fc52ffb2&cpid=560252&msg=" > responce = Net::HTTP.post_form(URI.parse(fightit),spooform) > puts responce this source for post_form (copied from ruby-doc.org): def HTTP.post_form(url, params) req = Post.new(url.path) req.form_data = params req.basic_auth url.user, url.password if url.user new(url.host, url.port).start {|http| http.request(req) } end You can see that it doesn't send Uri#query. Try either joining the GET parameters with POST ones, and send them all as POST params, or use Http#post and specify the path and query string. uri = URI.parse('http://...') i.e. Http.open(uri.host) do |http| response = http.post(uri.path + '?' + uri.query, ) end you'd need to find out how to encode the form data. Disclaimer: It's 1AM here, I have not tested anything, so take these as ideas to investigate... J.