Method: Chef::HTTP#streaming_request
- Defined in:
- lib/chef/http.rb
#streaming_request(path, headers = {}, tempfile = nil) {|tempfile| ... } ⇒ Object
Makes a streaming download request, streaming the response body to a tempfile. If a block is given, the tempfile is passed to the block and the tempfile will automatically be unlinked after the block is executed.
If no block is given, the tempfile is returned, which means it’s up to you to unlink the tempfile when you’re done with it.
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/chef/http.rb', line 219 def streaming_request(path, headers = {}, tempfile = nil) http_attempts ||= 0 url = create_url(path) response, rest_request, return_value = nil, nil, nil data = nil method = :GET method, url, processed_headers, data = apply_request_middleware(method, url, headers, data) response, rest_request, return_value = send_http_request(method, url, processed_headers, data) do |http_response| if http_response.is_a?(Net::HTTPSuccess) tempfile = stream_to_tempfile(url, http_response, tempfile) end apply_stream_complete_middleware(http_response, rest_request, return_value) end return nil if response.is_a?(Net::HTTPRedirection) unless response.is_a?(Net::HTTPSuccess) response.error! end if block_given? begin yield tempfile ensure tempfile && tempfile.close! end end tempfile rescue Net::HTTPClientException => e http_attempts += 1 response = e.response if response.is_a?(Net::HTTPNotAcceptable) && version_retries - http_attempts >= 0 Chef::Log.trace("Negotiating protocol version with #{url}, retry #{http_attempts}/#{version_retries}") retry else raise end rescue Exception => e log_failed_request(response, return_value) unless response.nil? raise end |