Rubyのパラメーターを使用してHTTP GET
リクエストを作成するにはどうすればよいですか?
POST
ingをしているときは簡単です:
require 'net/http'
require 'uri'
HTTP.post_form URI.parse('http://www.example.com/search.cgi'),
{ "q" => "Ruby", "max" => "50" }
しかし、'net/http'
を使用してGET
パラメーターをハッシュとして渡す方法はありません。
次の方法を使用します。
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)
バージョン1.9.2(と思う)以降、実際にはパラメーターをハッシュとして RI :: encode_www_form メソッドに渡すことができます:
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 )
そして、好みに応じて結果を取得します
require 'open-uri'
puts uri.open.read
または
require 'net/http'
puts Net::HTTP.get(uri)
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
最初のリクエストオブジェクトまたはhttpオブジェクトのジョブであるため、2番目のインスタンス化なしで動作することを期待しますが、このように機能しました。
Net::HTTP.get_print 'localhost', '/cgi-bin/badstore.cgi?searchquery=crystal&action=search&x=11&y=15'
または
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
Excon を使用します。
conn = Excon.new('http://www.example.com/search.cgi')
conn.get(:query => { "q" => "Ruby", "max" => "50" })
スタックオーバーフローの新機能で、コメントできないと思いますが、@ chris.mooseの関数定義に二重引用符がありません。 5行目は次のようになります。
return Net::HTTP.get(domain, "#{path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.reverse.join('&'))) if not params.nil?
またはここにコピー/貼り付けのために再定義されたすべてのものがあります
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-マイク
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
完璧ではないかもしれませんが、少なくともあなたはアイデアを得る。