Methods
- []
- []=
- body_size=
- contenttype
- contenttype=
- create_query_uri
- dump
- dump_line
- get
- init_request
- init_response
- new
- request_line
- response_status_code=
- response_status_line
- set
- set_header
Constants
StatusCodeMap | = | { Status::OK => 'OK', Status::MOVED_PERMANENTLY => 'Moved Permanently', Status::FOUND => 'Found', Status::SEE_OTHER => 'See Other', Status::TEMPORARY_REDIRECT => 'Temporary Redirect', Status::MOVED_TEMPORARILY => 'Temporary Redirect', Status::BAD_REQUEST => 'Bad Request', Status::INTERNAL => 'Internal Server Error', } |
CharsetMap | = | { 'NONE' => 'us-ascii', 'EUC' => 'euc-jp', 'SJIS' => 'shift_jis', 'UTF8' => 'utf-8', } |
Attributes
[RW] | body_charset | Charset. |
[RW] | body_date | A milestone of body. |
[R] | body_size | Size of body. |
[RW] | body_type | Content-type. |
[R] | chunked | Chunked or not. |
[RW] | http_version | HTTP version string in a HTTP header. |
[RW] | reason_phrase | HTTP status reason phrase. |
[R] | request_method | Request method. |
[R] | request_uri | Requested URI. |
[RW] | request_via_proxy | |
[R] | response_status_code |
Public Class methods
SYNOPSIS
HTTP::Message.new
ARGS
N/A
DESCRIPTION
Create a instance of HTTP request or HTTP response. Specify status_code for HTTP response.
[ show source ]
# File lib/facets/more/http.rb, line 138 def initialize @is_request = nil # true, false and nil @http_version = 'HTTP/1.1' @body_type = nil @body_charset = nil @body_size = nil @body_date = nil @header_item = [] @chunked = false @response_status_code = nil @reason_phrase = nil @request_method = nil @request_uri = nil @request_query = nil @request_via_proxy = nil end
Public Instance methods
[ show source ]
# File lib/facets/more/http.rb, line 227 def [](key) get(key).collect { |item| item[1] } end
[ show source ]
# File lib/facets/more/http.rb, line 223 def []=(key, value) set(key, value) end
body_size == nil means that the body is_a? IO
[ show source ]
# File lib/facets/more/http.rb, line 189 def body_size=(body_size) @body_size = body_size if @body_size @chunked = false else @chunked = true end end
[ show source ]
# File lib/facets/more/http.rb, line 180 def contenttype self['content-type'][0] end
[ show source ]
# File lib/facets/more/http.rb, line 184 def contenttype=(contenttype) self['content-type'] = contenttype end
[ show source ]
# File lib/facets/more/http.rb, line 198 def dump(dev = '') set_header if @is_request dev << request_line else dev << response_status_line end dev << @header_item.collect { |key, value| dump_line("#{ key }: #{ value }") }.join dev end
[ show source ]
# File lib/facets/more/http.rb, line 215 def get(key = nil) if !key @header_item else @header_item.find_all { |pair| pair[0].upcase == key.upcase } end end
[ show source ]
# File lib/facets/more/http.rb, line 155 def init_request(method, uri, query = nil, via_proxy = nil) @is_request = true @request_method = method @request_uri = if uri.is_a?(URI) uri else URI.parse(uri.to_s) end @request_query = create_query_uri(@request_uri, query) @request_via_proxy = via_proxy end
[ show source ]
# File lib/facets/more/http.rb, line 167 def init_response(status_code) @is_request = false self.response_status_code = status_code end
[ show source ]
# File lib/facets/more/http.rb, line 175 def response_status_code=(status_code) @response_status_code = status_code @reason_phrase = StatusCodeMap[@response_status_code] end
[ show source ]
# File lib/facets/more/http.rb, line 211 def set(key, value) @header_item.push([key, value]) end
Private Instance methods
[ show source ]
# File lib/facets/more/http.rb, line 291 def create_query_uri(uri, query) path = uri.path.dup path = '/' if path.empty? query_str = nil if uri.query query_str = uri.query end if query if query_str query_str << '&' << Message.create_query_part_str(query) else query_str = Message.create_query_part_str(query) end end if query_str path << '?' << query_str end path end
[ show source ]
# File lib/facets/more/http.rb, line 287 def dump_line(str) str + CRLF end
[ show source ]
# File lib/facets/more/http.rb, line 233 def request_line path = if @request_via_proxy if @request_uri.port "#{ @request_uri.scheme }://#{ @request_uri.host }:#{ @request_uri.port }#{ @request_query }" else "#{ @request_uri.scheme }://#{ @request_uri.host }#{ @request_query }" end else @request_query end dump_line("#{ @request_method } #{ path } #{ @http_version }") end
[ show source ]
# File lib/facets/more/http.rb, line 246 def response_status_line if defined?(Apache) dump_line("#{ @http_version } #{ response_status_code } #{ @reason_phrase }") else dump_line("Status: #{ response_status_code } #{ @reason_phrase }") end end
[ show source ]
# File lib/facets/more/http.rb, line 254 def set_header if defined?(Apache) set('Date', HTTP.http_date(Time.now)) end keep_alive = HTTP.keep_alive_enabled?(@http_version) set('Connection', 'close') unless keep_alive if @chunked set('Transfer-Encoding', 'chunked') else if keep_alive or @body_size != 0 set('Content-Length', @body_size.to_s) end end if @body_date set('Last-Modified', HTTP.http_date(@body_date)) end if @is_request == true if @http_version >= 'HTTP/1.1' if @request_uri.port == @request_uri.default_port set('Host', "#{@request_uri.host}") else set('Host', "#{@request_uri.host}:#{@request_uri.port}") end end elsif @is_request == false set('Content-Type', "#{ @body_type || 'text/html' }; charset=#{ CharsetMap[@body_charset || $KCODE] }") end end