methods=
sublibraries=cgi.session,cgi.session.pstore
requires=
classes=CGI,CGI=QueryExtension,CGI=QueryExtension=Value,CGI=Cookie,CGI=TagMaker,CGI=HtmlExtension,CGI=Html3,CGI=Html4,CGI=Html4Fr,CGI=Html4Tr
is_sublibrary=false

CGI ץλٱ饤֥Ǥ

CGI ץȥξܺ٤ˤĤƤϰʲʸ򻲾ȤƤ

  * [[url:http://Web.Golux.Com/coar/cgi/draft-coar-cgi-v11-03.txt]]
  * [[RFC:3875]]: The Common Gateway Interface (CGI) Version 1.1

=== 

==== եեɤͤ

  require "cgi"
  cgi = CGI.new
  values = cgi['field_name']   # <== 'field_name' 
    # 'field_name' ꤵƤʤä顢 []֤ (1.6)
    # 'field_name' ꤵƤʤä顢 ""֤(1.8)
  fields = cgi.keys            # <== field name

  # ե 'field_name' Ȥfield nameȤ˿
  cgi.has_key?('field_name')
  cgi.include?('field_name')

==== եեɤͤϥåȤ

եͤϥåȤˤ CGI#params Ȥޤ

  
  require "cgi"
  cgi = CGI.new
  params = cgi.params

ޤ CGI#params Ʊ Hash ֥Ȥ֤Τ
ʲΤ褦ʻȤǤޤ

  cgi.params['new_field_name'] = ["value"]  # ѥ᡼ä
  cgi.params['field_name'] = ["new_value"]  # ѥ᡼ͤѤ
  cgi.params.delete('field_name')           # ѥ᡼õ
  cgi.params.clear                          # ѥ᡼õ

==== եեɤͤե¸

PStore ȤΤǤñǤ

  # ¸
  require 'pstore'
  db = PStore.new("query.db")
  db.transaction do
    db["params"] = cgi.params
  end

  # 
  require 'pstore'
  db = PStore.new("query.db")
  db.transaction do
    cgi.params = db["params"]
  end

PStore  Ruby ΥСˤäƥǡߴ
ʤʤ뤳ȤΤǡĹ֥ǡ¸뤳Ȥ
ˤϸƤɬפǤ

[[c:PStore]] ⻲ȤƤ

==== ޥѡȥեɤͤʥե

  require "cgi"
  cgi = CGI.new
  value = cgi.params['field_name'][0]   # TempFile ֥ȡRuby 1.8Ǥ 10240Х̤ξ StringIO֥ȡ
  value.read                            # ʸƤեȡ
  value.local_path                      # եΥѥRuby 1.8Ǥ¸ߤʤ
  value.original_filename               # ̾
  value.content_type                    # content_type



==== 饤Ȥ˥åϤ

  require "cgi"
  cgi = CGI.new
  for name, cookie in cgi.cookies
    cookie.expires = Time.now + 30
  end
  cgi.out("cookie" => cgi.cookies){"string"}

  cgi.cookies # { "name1" => cookie1, "name2" => cookie2, ... }

  require "cgi"
  cgi = CGI.new
  cgi.cookies['name'].expires = Time.now + 30
  cgi.out("cookie" => cgi.cookies['name']){"string"}

==== 饤Ȥ饯å

  require "cgi"
  cgi = CGI.new
  values = cgi.cookies['name']  # values  name åͤ
                                # name å¸ߤʤ϶֤
  names = cgi.cookies.keys      # ƤΥå̾

==== CGI ˴ϢĶѿͤ

CGI ˴ϢĶѿͤľ ENV ¾ˡ
CGI 饹Υ᥽åɤ뤳ȤǤޤ
ŪˤϴĶѿ̾ downcase ᥽åɤ˥ޥåפޤ
㤨 AUTH_TYPE ˤ CGI#auth_type бޤ

  require "cgi"
  cgi = CGI.new
  value = cgi.auth_type

Τ褦ʴĶѿˤϰʲΤΤޤ

  * AUTH_TYPE
  * CONTENT_LENGTH
  * CONTENT_TYPE
  * GATEWAY_INTERFACE
  * PATH_INFO
  * PATH_TRANSLATED
  * QUERY_STRING
  * REMOTE_ADDR
  * REMOTE_HOST
  * REMOTE_IDENT
  * REMOTE_USER
  * REQUEST_METHOD
  * SCRIPT_NAME
  * SERVER_NAME
  * SERVER_PORT
  * SERVER_PROTOCOL
  * SERVER_SOFTWARE

#content_length  #server_port
򡢤¾Υ᥽åɤʸ֤ޤ

HTTP_COOKIE  HTTP_COOKIE2 ˤ
줾 raw_cookie  raw_cookie2 бޤ

  value = cgi.raw_cookie      # ENV["HTTP_COOKIE"]
  value = cgi.raw_cookie2     # ENV["HTTP_COOKIE2"]

Ǹˡʲ HTTP ϢδĶѿ HTTP_ ʬ downcase
᥽å̾Ƥޤ

  
  value = cgi.accept              # ENV["HTTP_ACCEPT"]
  value = cgi.accept_charset      # ENV["HTTP_ACCEPT_CHARSET"]

Τ褦ʴĶѿˤϰʲΤΤޤ

  * HTTP_ACCEPT
  * HTTP_ACCEPT_CHARSET
  * HTTP_ACCEPT_ENCODING
  * HTTP_ACCEPT_LANGUAGE
  * HTTP_CACHE_CONTROL
  * HTTP_FROM
  * HTTP_HOST
  * HTTP_NEGOTIATE
  * HTTP_PRAGMA
  * HTTP_REFERER
  * HTTP_USER_AGENT

CGI ˴ϢĶѿ˴ؤƤ
[[url:http://www.w3.org/CGI/]] ⻲ȤƤ

==== ɸϤ HTTP إå HTML Ϥ

  require "cgi"
  cgi = CGI.new("html3")  # HTML᥽åɤɲ
  cgi.out() do
    cgi.html() do
      cgi.head{ cgi.title{"TITLE"} } +
      cgi.body() do
        cgi.form() do
          cgi.textarea("get_text") +
          cgi.br +
          cgi.submit
        end +
        cgi.pre() do
          CGI.escapeHTML(
            "params: " + cgi.params.inspect + "\n" +
            "cookies: " + cgi.cookies.inspect + "\n" +
            ENV.collect() do |key, value|
              key + " --> " + value + "\n"
            end.join("")
          )
        end
      end
    end
  end

  # HTML᥽åɤɲ
  CGI.new("html3")    # html3.2
  CGI.new("html4")    # html4.0 (Strict)
  CGI.new("html4Tr")  # html4.0 Transitional
  CGI.new("html4Fr")  # html4.0 Frameset

==== եΥåץ

[[unknown:ɮ罸]]

[[ruby-list:25399]] 򻲾ȤƤ

=== ե饤⡼

[[unknown:ɮ罸]]

cgi ˤϡޥɥ饤󤫤 CGI ץȤưλȤߡʥե饤⡼ɡˤޤ
ޥɥ饤󤫤ʲΤ褦˼¹Ԥȡ

  $ ruby -r cgi some_script.rb
  (offline mode: enter name=value pairs on standard input)

ʹƤΤǡ

  q=hoge&v=foo

ʤɤϤƲ꡼Ϥ줿ͤåȤơץȤ¹Ԥޤ

ʤWindows Ķξ硢ͤϤ Enter 򲡤Ǥϼ¹Ԥޤ󡣥ܡɤ Ctrl + Z Ϥɬפޤ


=== HTMLȽѥ᥽å
 CGI ֥ȤݡȤʸͿ뤳ȤˤäơΥ֥Ȥ HTML ѤΥ᥽åɤɲä뤳ȤǤޤΥ᥽åɤѤ뤳Ȥˤꡢ֤RubyŪˡHTML ʸϤ뤳Ȥǽˤʤޤ

  㡧
  cgi = CGI.new("html3")  # HTML3.2˽򤷤HTML᥽åɤɲ
  cgi.h1
    # <H1></h1>
  cgi.h1{ "content" }
    # <H1>content</H1>
  cgi.h1({ "class" => "foo", "attr" => "bar" }){ "content" }
    # <H1 class="foo" attr="bar">content</H1>

  # HTML᥽åɤɲ
  CGI.new("html3")    # html3.2
  CGI.new("html4")    # html4.0 (Strict)
  CGI.new("html4Tr")  # html4.0 Transitional
  CGI.new("html4Fr")  # html4.0 Frameset

HTML ᥽åɤΰȤƤϡŪ Hash ֥ȤͿʤ뤤ϲͿʤˤ٤Ǥʲ󤵤줿᥽åɤǤϡƥ᥽åɤΰη˽äơ Hash ֥ȰʳΤΤϤȤǤޤ
