GET na adres http://sth..pl/sth/sth/?foo=bar&sth=oth

Mój skrypt musi wysłać requesta razem z parametrami. Próbowałem użyć set_form_data, ale nic z tego. Pewien dobry człowiek zaproponował mi dwa rozwiązania.

Czy to jest najlepsze wyjście? Nie można tego zapisać inaczej? Jak dla mnie, to ten kod jest za długi o co najmniej 10 linijek.

A nie wystarczy URI.parse, ewentualnie ustawienie query-stringa w obiekcie URI? Coś w rodzaju:

require 'net/http' uri = URI.parse("http://jakis.adres.pl/?query=string&blah=blah") uri.query #=> "query=string&blah=blah" Net::HTTP.get uri #=> ...

Nie, to nie wystarcza.

Możesz spróbować użyć gema httpclient http://dev.ctor.org/doc/httpclient/.

[code=ruby]require “rubygems”
require “httpclient”

client = HTTPClient.new
query = { “bar” => “baz” }
uri = ‘http://localhost:3000/foo
res = client.get(uri, query)

puts res.content[/code]

Tak z ciekawosci: dlaczego Net::HTTP nie wystarcza ? Bo uzywam go od kilku lat na rozne sposoby i jeszcze mnie nie zawiodl :wink:

@hosiawak

Tu nie chodzi o to, czy wystarcza, czy nie, po prostu zaproponowany kod wydał mi się nieco pokrętny :wink:

W związku z postem Radarka (dzięki za gema), mam dwa pytania:

  1. Lepiej zastosować gem czy monkey patching? A może po prostu wybrać wygodniejszą dla mnie metodę?
  2. Gdzie w projekcie RoR umieścić taki monkey patching?

@rav: być może się nie znam, ale gdzie ty tu widzisz monkeypatching?

class Hash def as_get_args get_args = sep = '' each do |k,v| get_args += sep+URI.encode(k.to_s)+"="+URI.encode(v.to_s) sep = '&' end get_args end end