Class: Async::HTTP::Protocol::HTTP1::Client
- Inherits:
-
Connection
- Object
- HTTP::Protocol::HTTP1::Connection
- Connection
- Async::HTTP::Protocol::HTTP1::Client
- Defined in:
- lib/async/http/protocol/http1/client.rb
Instance Attribute Summary
Attributes inherited from Connection
Instance Method Summary collapse
-
#call(request, task: Task.current) ⇒ Object
Used by the client to send requests to the remote server.
Methods inherited from Connection
#close, #connected?, #hijack, #initialize, #multiplex, #peer, #read_chunked_body, #read_fixed_body, #read_line, #read_remainder_body, #read_tunnel_body, #reusable?
Constructor Details
This class inherits a constructor from Async::HTTP::Protocol::HTTP1::Connection
Instance Method Details
#call(request, task: Task.current) ⇒ Object
Used by the client to send requests to the remote server.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/async/http/protocol/http1/client.rb', line 29 def call(request, task: Task.current) Async.logger.debug(self) {"#{request.method} #{request.path} #{request.headers.inspect}"} # We carefully interpret https://tools.ietf.org/html/rfc7230#section-6.3.1 to implement this correctly. begin self.write_request(request., request.method, request.path, self.version, request.headers) rescue # If we fail to fully write the request and body, we can retry this request. raise RequestFailed.new end if request.body? task.async do # Once we start writing the body, we can't recover if the request fails. That's because the body might be generated dynamically, streaming, etc. self.write_body(request.body) end else self.write_empty_body(request.body) end # This won't return the response until the entire body is written. return Response.new(self, request) rescue # This will ensure that #reusable? returns false. @stream.close raise end |