Module: Async::HTTP::Protocol::HTTP1::Client

Included in:
Async::HTTP::Protocol::HTTP10::Client, Async::HTTP::Protocol::HTTP11::Client
Defined in:
lib/async/http/protocol/http1/client.rb

Instance Method Summary collapse

Instance Method Details

#call(request) ⇒ Object

Used by the client to send requests to the remote server.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/async/http/protocol/http1/client.rb', line 30

def call(request)
	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.authority, 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
	
	# 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)
	
	return Response.new(self, request)
rescue
	# This will ensure that #reusable? returns false.
	@stream.close
	
	raise
end