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
-~----------~----~----~----~------~----~------~--~---