Streaming Responses¶ ↑
Sometimes you might need to receive a streaming response. You can do this with the on_data
request option.
The on_data
callback is a receives tuples of chunk Strings, and the total of received bytes so far.
This example implements such a callback:
# A buffer to store the streamed data streamed = [] conn = Faraday.new('http://httpbingo.org') conn.get('/stream/100') do |req| # Set a callback which will receive tuples of chunk Strings, # the sum of characters received so far, and the response environment. # The latter will allow access to the response status, headers and reason, as well as the request info. req.options.on_data = Proc.new do |chunk, overall_received_bytes, env| puts "Received #{overall_received_bytes} characters" streamed << chunk end end # Joins all response chunks together streamed.join
The on_data
streaming is currently only supported by some adapters. To see which ones, please refer to Awesome Faraday comparative table or check the adapter documentation. Moreover, the env
parameter was only recently added, which means some adapters may only have partial support (i.e. only chunk
and overall_received_bytes
will be passed to your block).