mirror of
https://github.com/rest-client/rest-client.git
synced 2022-11-09 13:49:40 -05:00
added parameter passing for get request using the :param key in header
This commit is contained in:
parent
d970eb85d7
commit
1afbc2a929
5 changed files with 58 additions and 16 deletions
|
@ -13,7 +13,7 @@ of specifying actions: get, put, post, delete.
|
|||
|
||||
RestClient.get 'http://example.com/resource'
|
||||
|
||||
RestClient.get 'https://user:password@example.com/private/resource'
|
||||
RestClient.get 'https://user:password@example.com/private/resource', {:accept => :json, :params => {'foo' => 'bar'}}
|
||||
|
||||
RestClient.post 'http://example.com/resource', :param1 => 'one', :nested => { :param2 => 'two' }
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
- forgot to include rest-client.rb in the gem
|
||||
- user, password and user-defined headers should survive a redirect
|
||||
- added 207 and 307 status code
|
||||
- added parameter passing for get request using the :param key in header
|
||||
|
||||
# 1.5.1
|
||||
|
||||
|
|
|
@ -27,14 +27,18 @@ module RestClient
|
|||
:open_timeout, :raw_response, :verify_ssl, :ssl_client_cert,
|
||||
:ssl_client_key, :ssl_ca_file, :processed_headers, :args
|
||||
|
||||
def self.execute(args, &block)
|
||||
new(args).execute(&block)
|
||||
def self.execute(args, & block)
|
||||
new(args).execute(& block)
|
||||
end
|
||||
|
||||
def initialize args
|
||||
@method = args[:method] or raise ArgumentError, "must pass :method"
|
||||
@url = args[:url] or raise ArgumentError, "must pass :url"
|
||||
@headers = args[:headers] || {}
|
||||
if args[:url]
|
||||
@url = process_get_params(args[:url], headers)
|
||||
else
|
||||
raise ArgumentError, "must pass :url"
|
||||
end
|
||||
@cookies = @headers.delete(:cookies) || args[:cookies] || {}
|
||||
@payload = Payload.generate(args[:payload])
|
||||
@user = args[:user]
|
||||
|
@ -51,14 +55,37 @@ module RestClient
|
|||
@args = args
|
||||
end
|
||||
|
||||
def execute &block
|
||||
def execute & block
|
||||
uri = parse_url_with_auth(url)
|
||||
transmit uri, net_http_request_class(method).new(uri.request_uri, processed_headers), payload, &block
|
||||
transmit uri, net_http_request_class(method).new(uri.request_uri, processed_headers), payload, & block
|
||||
end
|
||||
|
||||
# Extract the query parameters for get request and append them to the url
|
||||
def process_get_params url, headers
|
||||
if method == :get
|
||||
get_params = {}
|
||||
headers.delete_if do |key, value|
|
||||
if 'params' == key.to_s.downcase
|
||||
get_params.merge! value
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
unless get_params.empty?
|
||||
query_string = get_params.collect { |k, v| "#{k.to_s}=#{CGI::escape(v.to_s)}" }.join('&')
|
||||
url + "?#{query_string}"
|
||||
else
|
||||
url
|
||||
end
|
||||
else
|
||||
url
|
||||
end
|
||||
end
|
||||
|
||||
def make_headers user_headers
|
||||
unless @cookies.empty?
|
||||
user_headers[:cookie] = @cookies.map {|(key, val)| "#{key.to_s}=#{val}" }.sort.join(';')
|
||||
user_headers[:cookie] = @cookies.map { |(key, val)| "#{key.to_s}=#{val}" }.sort.join(';')
|
||||
end
|
||||
headers = stringify_headers(default_headers).merge(stringify_headers(user_headers))
|
||||
headers.merge!(@payload.headers) if @payload
|
||||
|
@ -107,7 +134,7 @@ module RestClient
|
|||
end
|
||||
end
|
||||
|
||||
def transmit uri, req, payload, &block
|
||||
def transmit uri, req, payload, & block
|
||||
setup_credentials req
|
||||
|
||||
net = net_http_class.new(uri.host, uri.port)
|
||||
|
@ -139,7 +166,7 @@ module RestClient
|
|||
net.start do |http|
|
||||
res = http.request(req, payload) { |http_response| fetch_body(http_response) }
|
||||
log_response res
|
||||
process_result res, &block
|
||||
process_result res, & block
|
||||
end
|
||||
rescue EOFError
|
||||
raise RestClient::ServerBrokeConnection
|
||||
|
@ -179,7 +206,7 @@ module RestClient
|
|||
http_response
|
||||
end
|
||||
|
||||
def process_result res, &block
|
||||
def process_result res, & block
|
||||
if @raw_response
|
||||
# We don't decode raw requests
|
||||
response = RawResponse.new(@tf, res, args)
|
||||
|
@ -188,9 +215,9 @@ module RestClient
|
|||
end
|
||||
|
||||
if block_given?
|
||||
block.call(response, self, &block)
|
||||
block.call(response, self, & block)
|
||||
else
|
||||
response.return!(self, &block)
|
||||
response.return!(self, & block)
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -212,7 +239,7 @@ module RestClient
|
|||
out = []
|
||||
out << "RestClient.#{method} #{url.inspect}"
|
||||
out << payload.short_inspect if payload
|
||||
out << processed_headers.to_a.sort.map{|(k,v)| [k.inspect, v.inspect].join("=>")}.join(", ")
|
||||
out << processed_headers.to_a.sort.map { |(k, v)| [k.inspect, v.inspect].join("=>") }.join(", ")
|
||||
RestClient.log << out.join(', ') + "\n"
|
||||
end
|
||||
end
|
||||
|
@ -228,7 +255,7 @@ module RestClient
|
|||
def stringify_headers headers
|
||||
headers.inject({}) do |result, (key, value)|
|
||||
if key.is_a? Symbol
|
||||
key = key.to_s.split(/_/).map{|w| w.capitalize}.join('-')
|
||||
key = key.to_s.split(/_/).map { |w| w.capitalize }.join('-')
|
||||
end
|
||||
if 'CONTENT-TYPE' == key.upcase
|
||||
target_value = value.to_s
|
||||
|
@ -240,7 +267,7 @@ module RestClient
|
|||
else
|
||||
target_values = value.to_s.split ','
|
||||
end
|
||||
result[key] = target_values.map{ |ext| MIME::Types.type_for_extension(ext.to_s.strip)}.join(', ')
|
||||
result[key] = target_values.map { |ext| MIME::Types.type_for_extension(ext.to_s.strip) }.join(', ')
|
||||
else
|
||||
result[key] = value.to_s
|
||||
end
|
||||
|
@ -249,7 +276,7 @@ module RestClient
|
|||
end
|
||||
|
||||
def default_headers
|
||||
{ :accept => '*/*; q=0.5, application/xml', :accept_encoding => 'gzip, deflate' }
|
||||
{:accept => '*/*; q=0.5, application/xml', :accept_encoding => 'gzip, deflate'}
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -37,6 +37,7 @@ Gem::Specification.new do |s|
|
|||
"spec/payload_spec.rb",
|
||||
"spec/raw_response_spec.rb",
|
||||
"spec/request_spec.rb",
|
||||
"spec/request2_spec.rb",
|
||||
"spec/resource_spec.rb",
|
||||
"spec/response_spec.rb",
|
||||
"spec/restclient_spec.rb",
|
||||
|
@ -58,6 +59,7 @@ Gem::Specification.new do |s|
|
|||
"spec/payload_spec.rb",
|
||||
"spec/raw_response_spec.rb",
|
||||
"spec/request_spec.rb",
|
||||
"spec/request2_spec.rb",
|
||||
"spec/resource_spec.rb",
|
||||
"spec/response_spec.rb",
|
||||
"spec/restclient_spec.rb",
|
||||
|
|
12
spec/request2_spec.rb
Normal file
12
spec/request2_spec.rb
Normal file
|
@ -0,0 +1,12 @@
|
|||
require File.dirname(__FILE__) + '/base'
|
||||
|
||||
require 'webmock/rspec'
|
||||
include WebMock
|
||||
|
||||
describe RestClient::Request do
|
||||
it "manage params for get requests" do
|
||||
stub_request(:get, 'http://some/resource?a=b&c=d').with(:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
|
||||
RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :headers => {:foo => :bar, :params => {:a => :b, 'c' => 'd'}}).body.should == 'foo'
|
||||
end
|
||||
end
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue