Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

In Files

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

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$/i =~ key
    next if /^content-length$/i =~ key
    name = "HTTP_" + key
    name.gsub!(/-/o, "_")
    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/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
            
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
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus