In Files

  • webrick/httprequest.rb
  • webrick/https.rb

Class/Module Index [+]

Quicksearch

WEBrick::HTTPRequest

Attributes

accept[R]
accept_charset[R]
accept_encoding[R]
accept_language[R]
addr[R]
attributes[R]
cipher[R]
client_cert[R]
cookies[R]

Header and entity body

header[R]

Header and entity body

http_version[R]
keep_alive[R]
path[R]

Request-URI

path_info[RW]
peeraddr[R]
query_string[RW]
raw_header[R]

Header and entity body

request_line[R]

Request line

request_method[R]
request_time[R]
request_uri[R]

Request-URI

script_name[RW]
server_cert[R]
unparsed_uri[R]
user[RW]

Misc

Public Class Methods

new(config) click to toggle source
 
               # File webrick/httprequest.rb, line 41
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
            

Public Instance Methods

[](header_name) click to toggle source
 
               # File webrick/httprequest.rb, line 146
def [](header_name)
  if @header
    value = @header[header_name.downcase]
    value.empty? ? nil : value.join(", ")
  end
end
            
body(&block) click to toggle source
 
               # File webrick/httprequest.rb, line 125
def body(&block)
  block ||= Proc.new{|chunk| @body << chunk }
  read_body(@socket, block)
  @body.empty? ? nil : @body
end
            
content_length() click to toggle source
 
               # File webrick/httprequest.rb, line 138
def content_length
  return Integer(self['content-length'])
end
            
content_type() click to toggle source
 
               # File webrick/httprequest.rb, line 142
def content_type
  return self['content-type']
end
            
each() click to toggle source
 
               # File webrick/httprequest.rb, line 153
def each
  @header.each{|k, v|
    value = @header[k]
    yield(k, value.empty? ? nil : value.join(", "))
  }
end
            
fixup() click to toggle source
 
               # File webrick/httprequest.rb, line 192
def fixup()
  begin
    body{|chunk| }   # read remaining body
  rescue HTTPStatus::Error => ex
    @logger.error("HTTPRequest#fixup: #{ex.class} occured.")
    @keep_alive = false
  rescue => ex
    @logger.error(ex)
    @keep_alive = false
  end
end
            
host() click to toggle source
 
               # File webrick/httprequest.rb, line 160
def host
  return @forwarded_host || @host
end
            
keep_alive?() click to toggle source
 
               # File webrick/httprequest.rb, line 180
def keep_alive?
  @keep_alive
end
            
meta_vars() click to toggle source
 
               # File webrick/httprequest.rb, line 204
def meta_vars
  # This method provides the metavariables defined by the revision 3
  # of ``The WWW Common Gateway Interface Version 1.1''.
  # (http://Web.Golux.Com/coar/cgi/)

  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$/ =~ key
    next if /^content-length$/ =~ key
    name = "HTTP_" + key
    name.gsub!(/-/, "_")
    name.upcase!
    meta[name] = val
  }

  meta
end
            
Also aliased as: orig_meta_vars
orig_meta_vars() click to toggle source
Alias for: meta_vars
orig_parse(socket=nil) click to toggle source
Alias for: parse
orig_parse_uri(str, scheme="http") click to toggle source
Alias for: parse_uri
parse(socket=nil) click to toggle source
 
               # File webrick/httprequest.rb, line 77
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/o =~ self["connection"]
    @keep_alive = false
  elsif /keep-alive/o =~ self["connection"]
    @keep_alive = true
  elsif @http_version < "1.1"
    @keep_alive = false
  else
    @keep_alive = true
  end
end
            
Also aliased as: orig_parse
port() click to toggle source
 
               # File webrick/httprequest.rb, line 164
def port
  return @forwarded_port || @port
end
            
query() click to toggle source
 
               # File webrick/httprequest.rb, line 131
def query
  unless @query
    parse_query()
  end
  @query
end
            
remote_ip() click to toggle source
 
               # File webrick/httprequest.rb, line 172
def remote_ip
  return self["client-ip"] || @forwarded_for || @peeraddr[3]
end
            
server_name() click to toggle source
 
               # File webrick/httprequest.rb, line 168
def server_name
  return @forwarded_server || @config[:ServerName]
end
            
ssl?() click to toggle source
 
               # File webrick/httprequest.rb, line 176
def ssl?
  return @request_uri.scheme == "https"
end
            
to_s() click to toggle source
 
               # File webrick/httprequest.rb, line 184
def to_s
  ret = @request_line.dup
  @raw_header.each{|line| ret << line }
  ret << CRLF
  ret << body if body
  ret
end