An HTTP request. This is consumed by service and do_* methods in WEBrick servlets
- #
- B
- C
- E
- H
- K
- M
- N
- P
- Q
- R
- S
| BODY_CONTAINABLE_METHODS | = | [ "POST", "PUT" ] |
| [R] | addr | The socket address of the server |
| [R] | attributes | Hash of request attributes |
| [R] | cipher | HTTP request SSL cipher |
| [R] | client_cert | HTTP request client certificate |
| [R] | keep_alive | Is this a keep-alive connection? |
| [R] | peeraddr | The socket address of the client |
| [R] | request_time | The local time this request was received |
| [R] | server_cert | HTTP request server certificate |
| [RW] | user | The remote user (CGI variable) |
Creates a new HTTP request. WEBrick::Config::HTTP is the default configuration.
Source: show
# File lib/webrick/httprequest.rb, line 151 def initialize(config) @config = config @buffer_size = @config[:InputBufferSize] @logger = config[:Logger] @request_line = @request_method = @unparsed_uri = @http_version = nil @request_uri = @host = @port = @path = nil @script_name = @path_info = nil @query_string = nil @query = nil @form_data = nil @raw_header = Array.new @header = nil @cookies = [] @accept = [] @accept_charset = [] @accept_encoding = [] @accept_language = [] @body = "" @addr = @peeraddr = nil @attributes = {} @user = nil @keep_alive = false @request_time = nil @remaining_size = nil @socket = nil @forwarded_proto = @forwarded_host = @forwarded_port = @forwarded_server = @forwarded_for = nil end
Retrieves header_name
Source: show
# File lib/webrick/httprequest.rb, line 286 def [](header_name) if @header value = @header[header_name.downcase] value.empty? ? nil : value.join(", ") end end
Returns the request body.
Source: show
# File lib/webrick/httprequest.rb, line 253 def body(&block) # :yields: body_chunk block ||= Proc.new{|chunk| @body << chunk } read_body(@socket, block) @body.empty? ? nil : @body end
The content-length header
Source: show
# File lib/webrick/httprequest.rb, line 272 def content_length return Integer(self['content-length']) end
The content-type header
Source: show
# File lib/webrick/httprequest.rb, line 279 def content_type return self['content-type'] end
Iterates over the request headers
Source: show
# File lib/webrick/httprequest.rb, line 296 def each if @header @header.each{|k, v| value = @header[k] yield(k, value.empty? ? nil : value.join(", ")) } end end
The host this request is for
Source: show
# File lib/webrick/httprequest.rb, line 308 def host return @forwarded_host || @host end
Should the connection this request was made on be kept alive?
Source: show
# File lib/webrick/httprequest.rb, line 343 def keep_alive? @keep_alive end
This method provides the metavariables defined by the revision 3 of “The WWW Common Gateway Interface Version 1.1” To browse the current document of CGI Version 1.1, see below: tools.ietf.org/html/rfc3875
Source: show
# File lib/webrick/httprequest.rb, line 375 def meta_vars meta = Hash.new cl = self["Content-Length"] ct = self["Content-Type"] meta["CONTENT_LENGTH"] = cl if cl.to_i > 0 meta["CONTENT_TYPE"] = ct.dup if ct meta["GATEWAY_INTERFACE"] = "CGI/1.1" meta["PATH_INFO"] = @path_info ? @path_info.dup : "" #meta["PATH_TRANSLATED"] = nil # no plan to be provided meta["QUERY_STRING"] = @query_string ? @query_string.dup : "" meta["REMOTE_ADDR"] = @peeraddr[3] meta["REMOTE_HOST"] = @peeraddr[2] #meta["REMOTE_IDENT"] = nil # no plan to be provided meta["REMOTE_USER"] = @user meta["REQUEST_METHOD"] = @request_method.dup meta["REQUEST_URI"] = @request_uri.to_s meta["SCRIPT_NAME"] = @script_name.dup meta["SERVER_NAME"] = @host meta["SERVER_PORT"] = @port.to_s meta["SERVER_PROTOCOL"] = "HTTP/" + @config[:HTTPVersion].to_s meta["SERVER_SOFTWARE"] = @config[:ServerSoftware].dup self.each{|key, val| next if /^content-type$/i =~ key next if /^content-length$/i =~ key name = "HTTP_" + key name.gsub!(/-/o, "_") name.upcase! meta[name] = val } meta end
Parses a request from socket. This is called internally by WEBrick::HTTPServer.
Source: show
# File lib/webrick/httprequest.rb, line 191 def parse(socket=nil) @socket = socket begin @peeraddr = socket.respond_to?(:peeraddr) ? socket.peeraddr : [] @addr = socket.respond_to?(:addr) ? socket.addr : [] rescue Errno::ENOTCONN raise HTTPStatus::EOFError end read_request_line(socket) if @http_version.major > 0 read_header(socket) @header['cookie'].each{|cookie| @cookies += Cookie::parse(cookie) } @accept = HTTPUtils.parse_qvalues(self['accept']) @accept_charset = HTTPUtils.parse_qvalues(self['accept-charset']) @accept_encoding = HTTPUtils.parse_qvalues(self['accept-encoding']) @accept_language = HTTPUtils.parse_qvalues(self['accept-language']) end return if @request_method == "CONNECT" return if @unparsed_uri == "*" begin setup_forwarded_info @request_uri = parse_uri(@unparsed_uri) @path = HTTPUtils::unescape(@request_uri.path) @path = HTTPUtils::normalize_path(@path) @host = @request_uri.host @port = @request_uri.port @query_string = @request_uri.query @script_name = "" @path_info = @path.dup rescue raise HTTPStatus::BadRequest, "bad URI `#{@unparsed_uri}'." end if /close/io =~ self["connection"] @keep_alive = false elsif /keep-alive/io =~ self["connection"] @keep_alive = true elsif @http_version < "1.1" @keep_alive = false else @keep_alive = true end end
The port this request is for
Source: show
# File lib/webrick/httprequest.rb, line 315 def port return @forwarded_port || @port end
Request query as a Hash
Source: show
# File lib/webrick/httprequest.rb, line 262 def query unless @query parse_query() end @query end
The client's IP address
Source: show
# File lib/webrick/httprequest.rb, line 329 def remote_ip return self["client-ip"] || @forwarded_for || @peeraddr[3] end
The server name this request is for
Source: show
# File lib/webrick/httprequest.rb, line 322 def server_name return @forwarded_server || @config[:ServerName] end
Is this an SSL request?
Source: show
# File lib/webrick/httprequest.rb, line 336 def ssl? return @request_uri.scheme == "https" end
| [R] | accept | The Accept header value |
| [R] | accept_charset | The Accept-Charset header value |
| [R] | accept_encoding | The Accept-Encoding header value |
| [R] | accept_language | The Accept-Language header value |
| [R] | cookies | The parsed request cookies |
| [R] | header | The parsed header of the request |
| [R] | raw_header | The raw header of the request |
| [R] | http_version | The HTTP version of the request |
| [R] | request_line | The complete request line such as: |
| [R] | request_method | The request method, GET, POST, PUT, etc. |
| [R] | unparsed_uri | The unparsed URI of the request |
| [R] | path | The request path |
| [RW] | path_info | The path info (CGI variable) |
| [RW] | query_string | The query from the URI of the request |
| [R] | request_uri | The parsed URI of the request |
| [RW] | script_name | The script name (CGI variable) |