From: yermej Date: 2009-11-24T02:30:12+09:00 Subject: Re: I can't seem to find an easy way to set Net::HTTP GET params On Nov 22, 5:14 pm, David Sainte-claire wrote: > Hello, > > I'm sure this is a newb question, but I've spent the last two hours > trying to figure out how to set the query paramters on an HTTP GET > request. > You have a couple options depending on what sort of input you're dealing with. uri = URI.parse('http://www.google.com/search?q=hello') # or: uri = URI::HTTP.build({:host => 'www.google.com', :path => '/ search', :query => 'q=hello'}) Net::HTTP.start(uri.host) do |http| response = http.get(uri.request_uri) # ... end However, as far as I know, there isn't a method that will do a GET in a similar way to the POST methods (i.e. you can't pass a hash of name/ value pairs). To make that happen, you'll need another method. Perhaps something like this: require 'cgi' def querify(query_hash) query_hash.map {|name, value| "#{CGI::escape(name.to_s)}=# {CGI::escape(value.to_s)}" }.join('&') end Then you could do: uri = URI::HTTP.build({:host => 'www.google.com', :path => '/ search', :query => querify({:q => 'hello'})}) Maybe I'm wrong and there is a better way to do this, but I haven't seen it in core/standard library. Anybody? Jeremy > Right now I am doing something like this: > >   def call() >     Net::HTTP.start(@base_url) do |http| >       response = http.get(@uri) >       puts "Code = #{response.code}" >       puts "Message = #{response.message}" >       puts "Body = #{response.body}" >    end > > It works as long as I include the query parameters as part of the @uri > string, but to me that doesn't seem like an elegant approach. > > I could just append the parameters to the end of the URI as part of the > call() method (right now it has no parameters, but I could change it to > something like call(params) which accepts a hash and manually append > them to the URI before calling the GET method. > > I'm just hoping that there's an easier, or more standard way of doing > it. > > Anyone ever run into something similar and has an elegant solution? > -- > Posted viahttp://www.ruby-forum.com/.