¿Cómo puedo enviar la solicitud HTTP GET con los parámetros a través de ruby?HTTP de Ruby obtener con los parámetros
He intentado muchos ejemplos pero todos han fallado.
¿Cómo puedo enviar la solicitud HTTP GET con los parámetros a través de ruby?HTTP de Ruby obtener con los parámetros
He intentado muchos ejemplos pero todos han fallado.
Supongo que entiende los ejemplos en el Net::HTTP documentation page pero no sabe cómo pasar los parámetros a la solicitud GET.
Sólo anexar los parámetros a la dirección solicitada, exactamente de la misma manera que escriba dicha dirección en el navegador:
require 'net/http'
res = Net::HTTP.start('localhost', 3000) do |http|
http.get('/users?id=1')
end
puts res.body
Si necesita alguna manera genérica para construir la cadena de parámetros de una matriz asociativa, puede crear un ayudante de la siguiente manera:
require 'cgi'
def path_with_params(page, params)
return page if params.empty?
page + "?" + params.map {|k,v| CGI.escape(k.to_s)+'='+CGI.escape(v.to_s) }.join("&")
end
path_with_params("/users", :id => 1, :name => "John&Sons")
# => "/users?name=John%26Sons&id=1"
sé que este post es antiguo, pero por el bien de los que fueron traídos por google, hay una manera más fácil de codificar sus parámetros de una manera segura URL. No estoy seguro de por qué no he visto esto en otro lugar, ya que el método está documentado en la página Net :: HTTP. He visto el método descrito por Arsen7 como la respuesta aceptada en varias otras preguntas también.
mencionado en la documentación Net::HTTP es URI.encode_www_form(params)
:
# Lets say we have a path and params that look like this:
path = "/search"
params = {q: => "answer"}
# Example 1: Replacing the #path_with_params method from Arsen7
def path_with_params(path, params)
encoded_params = URI.encode_www_form(params)
[path, encoded_params].join("?")
end
# Example 2: A shortcut for the entire example by Arsen7
uri = URI.parse("http://localhost.com" + path)
uri.query = URI.encode_www_form(params)
response = Net::HTTP.get_response(uri)
los que el ejemplo que usted elija es muy dependiente de su caso de uso. En mi proyecto actual estoy usando un método similar al recomendado por Arsen7 junto con el método más simple #path_with_params
y sin el formato de bloque.
# Simplified example implementation without response
# decoding or error handling.
require "net/http"
require "uri"
class Connection
VERB_MAP = {
:get => Net::HTTP::Get,
:post => Net::HTTP::Post,
:put => Net::HTTP::Put,
:delete => Net::HTTP::Delete
}
API_ENDPOINT = "http://dev.random.com"
attr_reader :http
def initialize(endpoint = API_ENDPOINT)
uri = URI.parse(endpoint)
@http = Net::HTTP.new(uri.host, uri.port)
end
def request(method, path, params)
case method
when :get
full_path = path_with_params(path, params)
request = VERB_MAP[method].new(full_path)
else
request = VERB_MAP[method].new(path)
request.set_form_data(params)
end
http.request(request)
end
private
def path_with_params(path, params)
encoded_params = URI.encode_www_form(params)
[path, encoded_params].join("?")
end
end
con = Connection.new
con.request(:post, "/account", {:email => "[email protected]"})
=> #<Net::HTTPCreated 201 Created readbody=true>
¿Puedes publicar algo que ya tengas? –
¿Qué quieres hacer con esta solicitud? ¿quieres obtener la respuesta? –
¿Has mirado los documentos 'net/http'? Si es así, ¿qué aún no está claro? –