[#91458] [Ruby trunk Feature#4475] default variable name for parameter — matz@...
Issue #4475 has been updated by matz (Yukihiro Matsumoto).
3 messages
2019/02/07
[ruby-core:91628] [Ruby trunk Feature#15624] Allow net/http Response to close before reading entire body
From:
sam.saffron@...
Date:
2019-02-27 03:25:25 UTC
List:
ruby-core #91628
Issue #15624 has been reported by sam.saffron (Sam Saffron).
----------------------------------------
Feature #15624: Allow net/http Response to close before reading entire body
https://bugs.ruby-lang.org/issues/15624
* Author: sam.saffron (Sam Saffron)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
Currently net/http has:
```
def reading_body(sock, reqmethodallowbody) #:nodoc: internal use only
@socket = sock
@body_exist = reqmethodallowbody && self.class.body_permitted?
begin
yield
self.body # ensure to read body
ensure
@socket = nil
end
end
```
The call to `self.body` ensures that unconditionally if you GET you must read the entire body.
For certain use cases a "partial" GET is useful, you may only be interested in reading the first 10000 bytes of a page and can act on that.
Trouble is this API dictates that unconditionally the entire GET request must be consume.
Proposal:
Add #close on Response to allow for early closing of stream.
So, instead of:
```
def get_status_code(headers)
status_code = nil
Net::HTTP.start(@uri.host, @uri.port, use_ssl: @uri.is_a?(URI::HTTPS)) do |http|
http.open_timeout = timeout
http.read_timeout = timeout
http.request_get(@uri.request_uri, headers) do |resp|
status_code = resp.code.to_i
resp.instance_variable_set(:@body_exist, false)
resp.instance_variable_set(:@body, "")
end
end
status_code
end
```
We could have:
```
def get_status_code(headers)
status_code = nil
Net::HTTP.start(@uri.host, @uri.port, use_ssl: @uri.is_a?(URI::HTTPS)) do |http|
http.open_timeout = timeout
http.read_timeout = timeout
http.request_get(@uri.request_uri, headers) do |resp|
status_code = resp.code.to_i
resp.close
end
status_code
end
```
Happy to submit the patch
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>