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.