aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/net/http.rb8
-rw-r--r--test/net/http/test_http.rb11
2 files changed, 18 insertions, 1 deletions
diff --git a/lib/net/http.rb b/lib/net/http.rb
index bc181c01af..663b901a96 100644
--- a/lib/net/http.rb
+++ b/lib/net/http.rb
@@ -1504,7 +1504,13 @@ module Net #:nodoc:
begin
begin_transport req
res = catch(:response) {
- req.exec @socket, @curr_http_version, edit_path(req.path)
+ begin
+ req.exec @socket, @curr_http_version, edit_path(req.path)
+ rescue Errno::EPIPE
+ # Failure when writing full request, but we can probably
+ # still read the received response.
+ end
+
begin
res = HTTPResponse.read_new(@socket)
res.decode_content = req.decode_content
diff --git a/test/net/http/test_http.rb b/test/net/http/test_http.rb
index b5c4463544..f648ce5ae9 100644
--- a/test/net/http/test_http.rb
+++ b/test/net/http/test_http.rb
@@ -890,6 +890,17 @@ class TestNetHTTP_v1_2 < Test::Unit::TestCase
Net::HTTP.version_1_2
super
end
+
+ def test_send_large_POST_request
+ start {|http|
+ data = ' '*6000000
+ res = http.send_request('POST', '/', data, 'content-type' => 'application/x-www-form-urlencoded')
+ assert_kind_of Net::HTTPResponse, res
+ assert_kind_of String, res.body
+ assert_equal data.size, res.body.size
+ assert_equal data, res.body
+ }
+ end
end
class TestNetHTTP_v1_2_chunked < Test::Unit::TestCase