1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
module EventMachine
# A simple hash is returned for each request made by HttpClient with the
# headers that were given by the server for that request.
class HttpResponseHeader < Hash
# The reason returned in the http response ("OK","File not found",etc.)
attr_accessor :http_reason
# The HTTP version returned.
attr_accessor :http_version
# The status code (as a string!)
attr_accessor :http_status
# E-Tag
def etag
self[HttpClient::ETAG]
end
def last_modified
self[HttpClient::LAST_MODIFIED]
end
# HTTP response status as an integer
def status
Integer(http_status) rescue 0
end
# Length of content as an integer, or nil if chunked/unspecified
def content_length
@content_length ||= ((s = self[HttpClient::CONTENT_LENGTH]) &&
(s =~ /^(\d+)$/)) ? $1.to_i : nil
end
# Cookie header from the server
def cookie
self[HttpClient::SET_COOKIE]
end
# Is the transfer encoding chunked?
def chunked_encoding?
/chunked/i === self[HttpClient::TRANSFER_ENCODING]
end
def keep_alive?
/keep-alive/i === self[HttpClient::KEEP_ALIVE]
end
def compressed?
/gzip|compressed|deflate/i === self[HttpClient::CONTENT_ENCODING]
end
def location
self[HttpClient::LOCATION]
end
end
class HttpChunkHeader < Hash
# When parsing chunked encodings this is set
attr_accessor :http_chunk_size
def initialize
super
@http_chunk_size = '0'
end
# Size of the chunk as an integer
def chunk_size
@http_chunk_size.to_i(base=16)
end
end
end
|