restclient rails net example ruby-on-rails ruby http get

ruby-on-rails - net - restclient ruby on rails



Solicitud de obtención parametrizada en Ruby? (7)

Desde la versión 1.9.2 (creo) puedes pasar los parámetros como un hash al método URI::encode_www_form como este:

require ''uri'' uri = URI.parse(''http://www.example.com/search.cgi'') params = { :q => "ruby", :max => "50" } # Add params to URI uri.query = URI.encode_www_form( params )

y luego busca el resultado, según tus preferencias

require ''open-uri'' puts uri.open.read

o

require ''net/http'' puts Net::HTTP.get(uri)

¿Cómo realizo una solicitud HTTP GET con parámetros en Ruby?

Es fácil de hacer cuando está POST :

require ''net/http'' require ''uri'' HTTP.post_form URI.parse(''http://www.example.com/search.cgi''), { "q" => "ruby", "max" => "50" }

Pero no veo manera de pasar los parámetros GET como un hash usando ''net/http'' .


Use Excon :

conn = Excon.new(''http://www.example.com/search.cgi'') conn.get(:query => { "q" => "ruby", "max" => "50" })


Utiliza el siguiente método:

require ''net/http'' require ''cgi'' def http_get(domain,path,params) return Net::HTTP.get(domain, "#{path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.join(''&''))) if not params.nil? return Net::HTTP.get(domain, path) end params = {:q => "ruby", :max => 50} print http_get("www.example.com", "/search.cgi", params)


nuevo en y supongo que no puedo comentar, pero a @ chris.moose le faltan comillas dobles en su función def. La línea 5 debe ser:

return Net::HTTP.get(domain, "#{path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.reverse.join(''&''))) if not params.nil?

o aquí está todo redefinido para copiar / pegar

require ''net/http'' require ''cgi'' def http_get(domain,path,params) return Net::HTTP.get(domain, "#{path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.reverse.join(''&''))) if not params.nil? return Net::HTTP.get(domain, path) end

<3 -mike


Net::HTTP.get_print ''localhost'', ''/cgi-bin/badstore.cgi?searchquery=crystal&action=search&x=11&y=15''

o

uri = URI.parse("http://localhost") req = Net::HTTP::Get.new("/cgi-bin/badstore.cgi?searchquery=crystal&action=search&x=11&y=15") http = Net::HTTP.new(uri.host, uri.port) response = http.start do |http| http.request(req) end


This is the easiest way to do it require ''net/http'' require ''uri'' @siteurl = "http://www.google.de/search/#{@yourquery}" define your query @yourquery = "whatever" uri = URI.parse( "@siteurl" ); http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.path) # instantiate a new Request object request = Net::HTTP::Get.new( uri.path+ ''?'' + request.body ) response = http.request(request) puts response.body

Puede que no sea perfecto, pero al menos entiendes la idea.


require ''net/http'' require ''uri'' uri = URI.parse( "http://www.google.de/search" ); params = {''q''=>''cheese''} http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.path) request.set_form_data( params ) # instantiate a new Request object request = Net::HTTP::Get.new( uri.path+ ''?'' + request.body ) response = http.request(request) puts response.body

Esperaría que funcionara sin la segunda instanciación, ya que sería el primer objeto de solicitud o el trabajo del objeto http, pero funcionó para mí de esta manera.