I know this is bad mvc, but i have a model class that needs to send a request off to a web service. At the moment i''m building a request string with url and params, and then doing a ''system'' call to call curl with the url. This feels pretty dirty though. Is there a nicer way to just fire off an http request? thanks max -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Nov-19 14:36 UTC
Re: Sending a fire&forget http request in a model class.
On 19 Nov 2008, at 14:23, Max Williams wrote:> > I know this is bad mvc, but i have a model class that needs to send a > request off to a web service. At the moment i''m building a request > string with url and params, and then doing a ''system'' call to call > curl > with the url. This feels pretty dirty though. Is there a nicer way > to > just fire off an http request? >net/http or similar ? Fred> thanks > max > -- > Posted via http://www.ruby-forum.com/. > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
James Englert
2008-Nov-20 01:12 UTC
Re: Sending a fire&forget http request in a model class.
Hey, I would check this out: http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html Syntax looks something like: http = Net::HTTP.new("www.google.com") headers, body = http.get() Hope that help Jim Englert http://www.jim-rants.com/coding-blog/ On Wed, Nov 19, 2008 at 9:36 AM, Frederick Cheung < frederick.cheung-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > > On 19 Nov 2008, at 14:23, Max Williams wrote: > > > > > I know this is bad mvc, but i have a model class that needs to send a > > request off to a web service. At the moment i''m building a request > > string with url and params, and then doing a ''system'' call to call > > curl > > with the url. This feels pretty dirty though. Is there a nicer way > > to > > just fire off an http request? > > > net/http or similar ? > > Fred > > thanks > > max > > -- > > Posted via http://www.ruby-forum.com/. > > > > > > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Max Williams
2008-Nov-20 09:38 UTC
Re: Sending a fire&forget http request in a model class.
Thanks Fred I''m not having any luck with it so far - this is the curl call i was making (with some changes to protect the innocent): curl http://www.l-mail.biz/scripts/lia/lia.php \ -d l_cid=''1106'' \ -d l_key=''cg3608898b74a4c688787ab479b8bb9f'' \ -d l_content=''http://ir.chazanga.com/letter/show?encoded=MTE4MiZpdCdzIHdlZG5lc2RheQ=='' \ -d l_pb_url=''http://ir.chazanga.com/letter/confirm'' \ -d l_sname=''chazanga'' \ -d l_rname=''Max Williams'' \ -d l_rcname=''chazanga'' \ -d l_raddress1=''Suites 17 & 18'' \ -d l_raddress2=''9-12 Middle Street'' \ -d l_rcity=''Brighton'' \ -d l_rpostcode=''BN1 3TN'' \ -d l_rcountry=''3'' \ -d l_email=''maxilliams-P31f+4y/2qxWk0Htik3J/w@public.gmane.org'' \ -d l_fb_emails=''1'' \ -d p_user_id=''2054'' So, when i tried to use Net::HTTP i was trying to deal with this massive params string. I split it up like so: domain = "www.l-mail.biz" path = "/scripts/lia/lia.php" params = "l_cid=1106&l_key=cg3608898b74a4c688787ab479b8bb9f&l_content=http://ir.chazanga.com/letter/show?encoded=MTE4MiZpdCdzIHdlZG5lc2RheQ==&l_pb_url=http://ir.chazanga.com/letter/confirm&l_sname=chazanga&l_rname=Max-Williams&l_rcname=chazanga&l_raddress1=Suites-17-18&l_raddress2=9-12-Middle-Street&l_rcity=Brighton&l_rpostcode=BN1-3TN&l_rcountry=3&l_email=maxwilliams-P31f+4y/2qxWk0Htik3J/w@public.gmane.org&l_fb_emails=1&p_user_id=2054" The params string had spaces and & signs in it, so i just replaced them with safe characters temporarily while i played with Net::HTTP (with escaping them properly down for a later task). I tried this: http = Net::HTTP.new("#{domain}") headers, body = http.get("#{path}?#{params}") and got a 401 (Authorisation required) error back. I think maybe my params weren''t going through properly. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Nov-20 10:14 UTC
Re: Sending a fire&forget http request in a model class.
On 20 Nov 2008, at 09:38, Max Williams wrote:> > Thanks Fred > > I''m not having any luck with it so far - this is the curl call i was > making (with some changes to protect the innocent): > > curl http://www.l-mail.biz/scripts/lia/lia.php \ > -d l_cid=''1106'' \ > -d l_key=''cg3608898b74a4c688787ab479b8bb9f'' \ > -d > l_content=''http://ir.chazanga.com/letter/show?encoded=MTE4MiZpdCdzIHdlZG5lc2RheQ=='' > \ > -d l_pb_url=''http://ir.chazanga.com/letter/confirm'' \ > -d l_sname=''chazanga'' \ > -d l_rname=''Max Williams'' \ > -d l_rcname=''chazanga'' \ > -d l_raddress1=''Suites 17 & 18'' \ > -d l_raddress2=''9-12 Middle Street'' \ > -d l_rcity=''Brighton'' \ > -d l_rpostcode=''BN1 3TN'' \ > -d l_rcountry=''3'' \ > -d l_email=''maxilliams-P31f+4y/2qxWk0Htik3J/w@public.gmane.org'' \ > -d l_fb_emails=''1'' \ > -d p_user_id=''2054'' > > So, when i tried to use Net::HTTP i was trying to deal with this > massive > params string. I split it up like so: > > domain = "www.l-mail.biz" > > path = "/scripts/lia/lia.php" > > params > "l_cid=1106&l_key=cg3608898b74a4c688787ab479b8bb9f&l_content=http://ir.chazanga.com/letter/show?encoded=MTE4MiZpdCdzIHdlZG5lc2RheQ==&l_pb_url=http://ir.chazanga.com/letter/confirm&l_sname=chazanga&l_rname=Max-Williams&l_rcname=chazanga&l_raddress1=Suites-17-18&l_raddress2=9-12-Middle-Street&l_rcity=Brighton&l_rpostcode=BN1-3TN&l_rcountry=3&l_email=maxwilliams-P31f+4y/2qxWk0Htik3J/w@public.gmane.org&l_fb_emails=1&p_user_id=2054 > " > > The params string had spaces and & signs in it, so i just replaced > them > with safe characters temporarily while i played with Net::HTTP (with > escaping them properly down for a later task). > > I tried this: > > http = Net::HTTP.new("#{domain}") > headers, body = http.get("#{path}?#{params}")Yuck. would be a lot easier to take a hash of params (ie {''l_cid'' => ''1106'', ''l_key'' => ''cg3608898b74a4c688787ab479b8bb9f'', ...} and then call to_query on it. Net::HTTP will also do that for you, with something like response = Net::HTTP.start(host, port) do |http| get = Net::HTTP::Get.new path get.form_data = some_hash get.content_type = "application/x-www-form-urlencoded" http.request get end Fred --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Max Williams
2008-Nov-20 10:57 UTC
Re: Sending a fire&forget http request in a model class.
Thanks Fred... I totally agree, i actually build up all the params in a hash anyway. Here it is in your recommended format. One of the params has the complication of actually being a full url with params itself. Curl seems to deal happily with this, i''m guessing it escapes everything nicely. But trying this, i get the same 401 error back (#<Net::HTTPUnauthorized 401 Authorization Required readbody=true>). host = "www.l-mail.biz" port = 80 path = "/scripts/lia/lia.php" param_hash = { :l_cid => ''1106'', :l_key => ''cg3608898b74a4c688787ab479b8bb9f'', :l_content => ''http://ir.chazanga.com/letter/show?encoded=MTE4MiZpdCdzIHdlZG5lc2RheQ=='', :l_pb_url => ''http://ir.chazanga.com/letter/confirm'', :l_sname => ''chazanga'', :l_rname => ''Max Williams'', :l_rcname => ''chazanga'', :l_raddress1 => ''Suites 17 & 18'', :l_raddress2 => ''9-12 Middle Street'', :l_rcity => ''Brighton'', :l_rpostcode => ''BN1 3TN'', :l_rcountry => ''3'', :l_email => ''maxwilliams-P31f+4y/2qxWk0Htik3J/w@public.gmane.org'', :l_fb_emails => ''1'', :p_user_id => ''2054'' } response = Net::HTTP.start(host, port) do |http| get = Net::HTTP::Get.new path get.form_data = param_hash get.content_type = "application/x-www-form-urlencoded" http.request get end -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---