summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/net/http.rb18
-rw-r--r--lib/net/protocol.rb17
2 files changed, 31 insertions, 4 deletions
diff --git a/lib/net/http.rb b/lib/net/http.rb
index dfc776e9f34..40025d06a55 100644
--- a/lib/net/http.rb
+++ b/lib/net/http.rb
@@ -54,6 +54,20 @@ module Net
If called as iterator, give a part String of entity body.
+ Note:
+ If status is not 2xx(success), ProtocolError exception is
+ raised. At that time, you can get Response object from
+ execption object. (same in head/post)
+
+ ex.
+
+ begin
+ head, body = http.get(...)
+ rescue ProtoRetriableError
+ response = $!.data
+ ...
+ end
+
: head( path, header = nil )
get only header from "path" on connecting host.
"header" is a Hash like { 'Accept' => '*/*', ... }.
@@ -375,7 +389,9 @@ All "key" is case-insensitive.
end
def value
- error! unless SuccessCode === self
+ unless SuccessCode === self then
+ error! self
+ end
end
end
diff --git a/lib/net/protocol.rb b/lib/net/protocol.rb
index 02a469cc0de..01b659f72f0 100644
--- a/lib/net/protocol.rb
+++ b/lib/net/protocol.rb
@@ -68,7 +68,7 @@ Object
class Protocol
- Version = '1.1.20'
+ Version = '1.1.21'
class << self
@@ -295,8 +295,8 @@ Object
attr_reader :code_type, :code, :message
alias msg message
- def error!
- raise @code_type.error_type, @code + ' ' + Net.quote(@message)
+ def error!( data = nil )
+ raise code_type.error_type.new( code + ' ' + Net.quote(msg), data )
end
end
@@ -312,6 +312,17 @@ Object
class ProtoRetriableError < ProtocolError; end
ProtocRetryError = ProtoRetriableError
+ class ProtocolError
+
+ def initialize( msg, data )
+ super msg
+ @data = data
+ end
+
+ attr :data
+
+ end
+
class Code