Method: HTTPClient#request
- Defined in:
- lib/httpclient.rb
#request(method, uri, *args, &block) ⇒ Object
Sends a request to the specified URL.
- method
-
HTTP method to be sent. method.to_s.upcase is used.
- uri
-
a String or an URI object which represents an URL of web resource.
- query
-
a Hash or an Array of query part of URL. e.g. { “a” => “b” } => ‘host/part?a=b’ Give an array to pass multiple value like
- [“a”, “b”], [“a”, “c”]
-
> ‘host/part?a=b&a=c’
- body
-
a Hash or an Array of body part. e.g.
{ "a" => "b" } => 'a=b'Give an array to pass multiple value like
[["a", "b"], ["a", "c"]] => 'a=b&a=c'.When the given method is ‘POST’ and the given body contains a file as a value, it will be posted as a multipart/form-data. e.g.
{ 'upload' => file }You can also send custom multipart by passing an array of hashes. Each part must have a :content attribute which can be a file, all other keys will become headers.
[{ 'Content-Type' => 'text/plain', :content => "some text" }, { 'Content-Type' => 'video/mp4', :content => File.new('video.mp4') }] => <Two parts with custom Content-Type header>See HTTP::Message.file? for actual condition of ‘a file’.
- header
-
a Hash or an Array of extra headers. e.g. { ‘Accept’ => ‘text/html’ } or [[‘Accept’, ‘image/jpeg’], [‘Accept’, ‘image/png’]].
- &block
-
Give a block to get chunked message-body of response like get(uri) { |chunked_body| … }. Size of each chunk may not be the same.
You can also pass a String as a body. HTTPClient just sends a String as a HTTP request message body.
When you pass an IO as a body, HTTPClient sends it as a HTTP request with chunked encoding (Transfer-Encoding: chunked in HTTP header) if IO does not respond to :size. Bear in mind that some server application does not support chunked request. At least cgi.rb does not support it.
846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 |
# File 'lib/httpclient.rb', line 846 def request(method, uri, *args, &block) query, body, header, follow_redirect = keyword_argument(args, :query, :body, :header, :follow_redirect) if method == :propfind header ||= PROPFIND_DEFAULT_EXTHEADER else header ||= {} end uri = to_resource_url(uri) if block filtered_block = adapt_block(&block) end if follow_redirect follow_redirect(method, uri, query, body, header, &block) else do_request(method, uri, query, body, header, &filtered_block) end end |