Latest web development tutorials

การเขียนโปรแกรม CGI หลาม

CGI คืออะไร

CGI การบำรุงรักษาในขณะนี้โดย NCSA, NCSA CGI ถูกกำหนดไว้ดังต่อไปนี้:

CGI (Common Gateway Interface) Common Gateway Interface ซึ่งเป็นโปรแกรมที่ทำงานบนเซิร์ฟเวอร์เช่นเซิร์ฟเวอร์ HTTP ติดต่อลูกค้าให้หน้า HTML เดียวกัน


การท่องเว็บ

เพื่อทำความเข้าใจวิธี CGI ทำงานเราสามารถคลิกที่ลิงค์บนหน้าเว็บหรือ URL ของกระบวนการ:

  • 1 ใช้เบราว์เซอร์ของคุณเพื่อเข้าถึง URL และเชื่อมต่อไปยังเว็บเซิร์ฟเวอร์ HTTP
  • 2 เว็บเซิร์ฟเวอร์ได้รับข้อความร้องขอจะถูกแยก URL และมองไฟล์เข้าถึงได้บนเซิร์ฟเวอร์ถ้ามีถ้ามีจะกลับเนื้อหาของแฟ้มมิฉะนั้นก็จะส่งกลับข้อผิดพลาด
  • 3, เบราว์เซอร์ได้รับข้อมูลจากเซิร์ฟเวอร์และแสดงไฟล์ที่ได้รับหรือข้อความผิดพลาด

โปรแกรม CGI สามารถสคริปต์ Python สคริปต์ PERL, เชลล์สคริปต์, C หรือ C ++ โปรแกรม


แผนภูมิ CGI

cgiarch


การกำหนดค่าเซิร์ฟเวอร์เว็บและการสนับสนุน

ก่อนที่จะทำการเขียนโปรแกรม CGI, ให้แน่ใจว่าเว็บเซิร์ฟเวอร์ของคุณได้รับการกำหนดค่าให้สนับสนุน CGI และ CGI จัดการ

Apache สนับสนุนการกำหนดค่า CGI:

ตั้งค่าไดเรกทอรี CGI นี้:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

เซิร์ฟเวอร์ HTTP ทั้งหมดที่จะรันโปรแกรม CGI จะถูกเก็บไว้ในไดเรกทอรีที่กำหนดไว้ล่วงหน้า ไดเรกทอรีนี้เรียกว่าไดเรกทอรี CGI และโดยการประชุมมันเป็นชื่อ / var / www / directory cgi-bin

ไฟล์ CGI .cgi ขยายหลามยังสามารถใช้นามสกุล .py

โดยค่าเริ่มต้นการกำหนดค่าเซิร์ฟเวอร์ Linux ทำงานไดเรกทอรี cgi-bin เป็น / var / www

หากคุณต้องการที่จะระบุไดเรกทอรีที่แตกต่างกันเพื่อเรียกใช้สคริปต์ CGI, คุณสามารถปรับเปลี่ยนการตั้งค่าไฟล์ httpd.conf ดังต่อไปนี้:

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options +ExecCGI
   Order allow,deny
   Allow from all
</Directory>

เพิ่ม AddHandler ต่อท้าย .py เพื่อให้เราสามารถเข้าถึงปลาย .py ไฟล์สคริปต์หลาม:

AddHandler cgi-script .cgi .pl .py

โปรแกรม CGI แรก

เราใช้งูหลามในการสร้างโปรแกรม CGI ครั้งแรกเรียกว่า hello.py ไฟล์จะอยู่ใน / var / www / cgi-bin ไดเรกทอรีดังต่อไปนี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

print "Content-type:text/html"
print                               # 空行,告诉服务器结束头部
print '<html>'
print '<head>'
print '<meta charset="utf-8">'
print '<title>Hello Word - 我的第一个 CGI 程序!</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! 我是来自本教程的第一CGI程序</h2>'
print '</body>'
print '</html>'

หลังจากที่คุณบันทึก hello.py ไฟล์มีการแก้ไขปรับเปลี่ยนสิทธิ์ของแฟ้ม 755:

chmod 755 hello.py 

โปรแกรมดังกล่าวข้างต้นจะแสดงในเบราว์เซอร์ในการเข้าถึงผลมีดังนี้

hello.py สคริปต์นี้เป็นสคริปต์ Python ง่ายสคริปต์ของสายการส่งออกครั้งแรก "Content-Type: text / html" เพื่อส่งไปยังประเภทเบราว์เซอร์และบอกเบราว์เซอร์ในการแสดงเนื้อหาเป็น "text / html"

พิมพ์ออกด้วยบรรทัดว่างจะใช้ในการบอกปลายเซิร์ฟเวอร์ของข้อมูลส่วนหัว


หัว HTTP

เนื้อหาของแฟ้ม hello.py ใน: ส่วนหนึ่งของหัว HTTP คือ "ชนิดของเนื้อหา text / html" ก็จะถูกส่งไปยังชนิดเนื้อหาของเบราว์เซอร์บอกไฟล์เบราว์เซอร์

รูปแบบหัว HTTP จะเป็นดังนี้:

HTTP 字段名: 字段内容

ตัวอย่างเช่น:

Content-type: text/html

ตารางต่อไปนี้อธิบายข้อมูลในโปรแกรม CGI หัว HTTP มักจะมีการใช้

หัว ลักษณะ
ชนิดของเนื้อหา: นิติบุคคล MIME ที่สอดคล้องกับการร้องขอข้อมูล ตัวอย่างเช่น Content-Type: text / html
หมดอายุ: วัน วันที่และเวลาการตอบสนองหมดอายุ
ตำแหน่งที่ตั้ง: URL เมื่อต้องการเปลี่ยนเส้นทางผู้รับคำขอ URL ที่ไม่ตั้งให้เสร็จสมบูรณ์คำขอหรือบัตรประจำตัวของทรัพยากรใหม่
วันที่: วันที่แก้ไขล่าสุด ทรัพยากรที่ร้องขอแก้ไขล่าสุด
ความยาวของเนื้อหา: ยังไม่มี ร้องขอความยาวของเนื้อหา
คุกกี้ชุด: String การตั้งค่า http คุกกี้

ตัวแปร CGI สิ่งแวดล้อม

โปรแกรม CGI ทั้งหมดได้รับตัวแปรสภาพแวดล้อมต่อไปนี้ซึ่งมีบทบาทสำคัญในโปรแกรม CGI:

ชื่อตัวแปร ลักษณะ
CONTENT_TYPE ค่านี้ระบุว่าตัวแปรสภาพแวดล้อมประเภท MIME ของการถ่ายโอนข้อมูล ในปัจจุบันตัวแปรสภาพแวดล้อมโดยทั่วไป CONTENT_TYPE: application / x-www ฟอร์ม urlencoded เขากล่าวว่าข้อมูลจากรูปแบบ HTML ได้
CONTENT_LENGTH ถ้าเซิร์ฟเวอร์โหมดการถ่ายโอนและโปรแกรม CGI ข้อมูลที่โพสต์ถึงแม้ว่าสภาพแวดล้อมตัวแปร STDIN จำนวนไบต์ที่สามารถอ่านได้ข้อมูลที่ถูกต้องจากมาตรฐาน ตัวแปรสภาพแวดล้อมนี้เมื่ออ่านข้อมูลของท่านจะต้องใช้
HTTP_COOKIE เนื้อหาภายใน COOKIE ลูกค้า
HTTP_USER_AGENT รวมถึงการให้ข้อมูลหมายเลขรุ่นของเบราว์เซอร์ของลูกค้าหรือข้อมูลที่เป็นกรรมสิทธิ์อื่น ๆ
PATH_INFO ค่าของตัวแปรสภาพแวดล้อมเช่นนี้แสดงให้เห็นชื่อของโปรแกรม CGI ทันทีหลังจากที่ข้อมูลเส้นทางเพิ่มเติม มันมักจะปรากฏเป็นโปรแกรม CGI อาร์กิวเมนต์
QUERY_STRING ถ้าเซิร์ฟเวอร์โหมดการถ่ายโอนและโปรแกรม CGI ข้อมูลที่เป็นข้อมูลที่ได้รับค่าของตัวแปรสภาพแวดล้อมนี้แม้ว่าผ่าน ข้อมูลนี้จะตามด้วยชื่อของโปรแกรม CGI ทั้งในตรงกลางที่มีเครื่องหมายคำถาม "?" คั่น
REMOTE_ADDR ค่าของตัวแปรสภาพแวดล้อมเช่นนี้เป็นที่อยู่ IP ของลูกค้าส่งคำขอเช่น 192.168.1.67 ดังกล่าวข้างต้น ค่านี้เป็นปัจจุบันอยู่เสมอ และมันก็เป็นความต้องการที่จะให้ลูกค้าเว็บเพื่อระบุเฉพาะเว็บเซิร์ฟเวอร์ที่สามารถนำมาใช้ในโปรแกรม CGI ที่จะแยกแยะระหว่างเว็บไคลเอ็นต์ที่แตกต่างกัน
REMOTE_HOST ค่าของตัวแปรสภาพแวดล้อมนี้มีชื่อโฮสต์ของลูกค้าร้องขอของซีจี ถ้ามันไม่ได้คุณต้องการตรวจสอบคุณไม่จำเป็นต้องกำหนดตัวแปรสภาพแวดล้อมเช่นนี้
REQUEST_METHOD มันมีวิธีการที่เรียกว่าสคริปต์ สำหรับสคริปต์ / 1.0 โปรโตคอล HTTP เพียง แต่ได้รับการโพสต์และมีความหมาย
SCRIPT_FILENAME เส้นทางแบบเต็มไปสคริปต์ CGI
สคริปต์ ชื่อของสคริปต์ซีจี
SERVER_NAME นี้เป็นชื่อโฮสต์นามแฝงหรือที่อยู่ IP ของเซิร์ฟเวอร์เว็บของคุณ
SERVER_SOFTWARE ค่าของตัวแปรสภาพแวดล้อมนี้ประกอบด้วยชื่อโปรแกรมโทร CGI และหมายเลขรุ่นของเซิร์ฟเวอร์ HTTP ยกตัวอย่างเช่นค่าข้างต้นของ Apache / 2.2.14 (Unix)

นี่คือสคริปต์ CGI CGI ตัวแปรสภาพแวดล้อมการส่งออกง่าย:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# filename:test.py

import os

print "Content-type: text/html"
print
print "<meta charset=\"utf-8\">"
print "<b>环境变量</b><br>";
print "<ul>"
for key in os.environ.keys():
    print "<li><span style='color:green'>%30s </span> : %s </li>" % (key,os.environ[key])
print "</ul>"

บันทึกจุดดังกล่าว test.py และปรับเปลี่ยนสิทธิ์ของแฟ้ม 755 ผลการดำเนินการดังต่อไปนี้:


GET และวิธีการ POST

เบราว์เซอร์ของลูกค้าไปยังเซิร์ฟเวอร์เพื่อส่งข้อมูลในสองวิธีซึ่งทั้งสองวิธีคือการได้รับและวิธีการ POST

ใช้วิธีการ GET การถ่ายโอนข้อมูล

มีวิธีการในการส่งข้อมูลของผู้ใช้ไปยังเซิร์ฟเวอร์เข้ารหัสข้อมูลข้อมูลที่มีอยู่ใน URL ของหน้าขอไปยังหมายเลขที่แบ่งออกเป็นดังนี้ "?":

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2
ได้รับการร้องขอเกี่ยวกับบางส่วนของความคิดเห็นอื่น ๆ :
  • คำขอ GET สามารถเก็บไว้
  • ร้องขอ GET ยังคงอยู่ในประวัติของเบราว์เซอร์
  • GET หน้าสามารถบุ๊คมาร์ค
  • GET หน้าไม่ควรใช้เมื่อต้องรับมือกับข้อมูลที่สำคัญ
  • ได้รับการร้องขอมีข้อ จำกัด ระยะเวลา
  • GET หน้าควรจะใช้ในการดึงข้อมูล

ตัวอย่างของ URL แบบง่าย: มีวิธีการ

ต่อไปนี้เป็น URL ที่เรียบง่ายโดยใช้วิธีการจะได้รับการส่งสองพารามิเตอร์เพื่อ hello_get.py โปรแกรม:

/cgi-bin/test.py?name=本教程&url=http://www.w3big.com

แฟ้มรหัส hello_get.py:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# filename:test.py

# CGI处理模块
import cgi, cgitb 

# 创建 FieldStorage 的实例化
form = cgi.FieldStorage() 

# 获取数据
site_name = form.getvalue('name')
site_url  = form.getvalue('url')

print "Content-type:text/html"
print
print "<html>"
print "<head>"
print "<meta charset=\"utf-8\">"
print "<title>本教程 CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2>%s官网:%s</h2>" % (site_name, site_url)
print "</body>"
print "</html>"

หลังจากที่คุณบันทึก hello_get.py ไฟล์มีการแก้ไขปรับเปลี่ยนสิทธิ์ของแฟ้ม 755:

chmod 755 hello_get.py 

เบราว์เซอร์ขอเอาท์พุท:

ตัวอย่างของรูปแบบที่เรียบง่าย: มีวิธีการ

ต่อไปนี้เป็นสองส่งข้อมูลไปยังเซิร์ฟเวอร์โดยใช้วิธีการ GET โดยใช้แบบฟอร์ม HTML มีส่งไฟล์ hello_get.py สคริปต์เซิร์ฟเวอร์เดียวกันรหัส hello_get.html เป็นดังนี้:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/hello_get.py" method="get">
站点名称: <input type="text" name="name">  <br />

站点 URL: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

โดยค่าเริ่มต้นไดเรกทอรี cgi-bin สามารถเก็บไฟล์สคริปต์ที่เราจะอยู่ภายใต้ไดเรกทอรีทดสอบแก้ไขไฟล์สิทธิ์ hello_get.html เก็บไว้เป็น 755:

chmod 755 hello_get.html

นำเสนอ gif เป็นดังนี้:

ใช้วิธีการโพสต์เพื่อส่งผ่านข้อมูล

โดยใช้วิธีการโพสต์เพื่อส่งผ่านข้อมูลไปยังเซิร์ฟเวอร์ที่มีความปลอดภัยมากขึ้นและมีความน่าเชื่อถือเป็นบางข้อมูลที่สำคัญเช่นรหัสผ่านผู้ใช้จำเป็นต้องใช้โพสต์ในการถ่ายโอนข้อมูล

ต่อไปนี้ยังเป็น hello_get.py ก็ยังสามารถจัดการกับข้อมูล POST แบบฟอร์มที่ส่งมาจากเบราว์เซอร์:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# CGI处理模块
import cgi, cgitb 

# 创建 FieldStorage 的实例化
form = cgi.FieldStorage() 

# 获取数据
site_name = form.getvalue('name')
site_url  = form.getvalue('url')

print "Content-type:text/html"
print
print "<html>"
print "<head>"
print "<meta charset=\"utf-8\">"
print "<title>本教程 CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2>%s官网:%s</h2>" % (site_name, site_url)
print "</body>"
print "</html>"

ต่อไปนี้เป็นรูปแบบที่จะส่งข้อมูลไปยังเซิร์ฟเวอร์สคริปต์ hello_get.py โพสต์วิธีการ (method = "โพสต์") A:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/hello_get.py" method="post">
站点名称: <input type="text" name="name">  <br />

站点 URL: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

นำเสนอ gif เป็นดังนี้:

โปรแกรม CGI เพื่อส่งผ่านข้อมูลผ่านช่อง

ช่องทำเครื่องหมายที่ใช้ในการส่งหนึ่งหรือมากกว่าข้อมูลตัวเลือกโค้ด HTML ที่เป็นดังต่อไปนี้:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/checkbox.py" method="POST" target="_blank">
<input type="checkbox" name="w3big" value="on" /> 本教程
<input type="checkbox" name="google" value="on" /> Google
<input type="submit" value="选择站点" />
</form>
</body>
</html>

แฟ้มรหัส checkbox.py:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 引入 CGI 处理模块 
import cgi, cgitb 

# 创建 FieldStorage的实例 
form = cgi.FieldStorage() 

# 接收字段数据
if form.getvalue('google'):
   google_flag = "是"
else:
   google_flag = "否"

if form.getvalue('w3big'):
   w3big_flag = "是"
else:
   w3big_flag = "否"

print "Content-type:text/html"
print
print "<html>"
print "<head>"
print "<meta charset=\"utf-8\">"
print "<title>本教程 CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2> 本教程是否选择了 : %s</h2>" % w3big_flag
print "<h2> Google 是否选择了 : %s</h2>" % google_flag
print "</body>"
print "</html>"

ปรับเปลี่ยนสิทธิ์ checkbox.py:

chmod 755 checkbox.py

เบราว์เซอร์เข้าถึง Gif ชาร์ตที่นำเสนอ:

การถ่ายโอนข้อมูลผ่านทางวิทยุโปรแกรม CGI

วิทยุเพียงการถ่ายโอนข้อมูลไปยังเซิร์ฟเวอร์โค้ด HTML ที่เป็นดังต่อไปนี้:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/radiobutton.py" method="post" target="_blank">
<input type="radio" name="site" value="w3big" /> 本教程
<input type="radio" name="site" value="google" /> Google
<input type="submit" value="提交" />
</form>
</body>
</html>

รหัสสคริปต์ radiobutton.py เป็นดังนี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 引入 CGI 处理模块 
import cgi, cgitb 

# 创建 FieldStorage的实例 
form = cgi.FieldStorage() 

# 接收字段数据
if form.getvalue('site'):
   site = form.getvalue('site')
else:
   site = "提交数据为空"

print "Content-type:text/html"
print
print "<html>"
print "<head>"
print "<meta charset=\"utf-8\">"
print "<title>本教程 CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2> 选中的网站是 %s</h2>" % site
print "</body>"
print "</html>"

ปรับเปลี่ยนสิทธิ์ radiobutton.py:

chmod 755 radiobutton.py

เบราว์เซอร์เข้าถึง Gif ชาร์ตที่นำเสนอ:

การถ่ายโอนข้อมูล textarea ผ่านโปรแกรม CGI

textarea ผ่านหลายแถวของข้อมูลไปยังเซิร์ฟเวอร์โค้ด HTML ที่เป็นดังต่อไปนี้:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/textarea.py" method="post" target="_blank">
<textarea name="textcontent" cols="40" rows="4">
在这里输入内容...
</textarea>
<input type="submit" value="提交" />
</form>
</body>
</html>

รหัสสคริปต์ textarea.py เป็นดังนี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 引入 CGI 处理模块 
import cgi, cgitb 

# 创建 FieldStorage的实例 
form = cgi.FieldStorage() 

# 接收字段数据
if form.getvalue('textcontent'):
   text_content = form.getvalue('textcontent')
else:
   text_content = "没有内容"

print "Content-type:text/html"
print
print "<html>"
print "<head>";
print "<meta charset=\"utf-8\">"
print "<title>本教程 CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2> 输入的内容是:%s</h2>" % text_content
print "</body>"
print "</html>"

ปรับเปลี่ยนสิทธิ์ textarea.py:

chmod 755 textarea.py

เบราว์เซอร์เข้าถึง Gif ชาร์ตที่นำเสนอ:

หล่นลงข้อมูลผ่านโปรแกรม CGI

HTML code กล่องแบบหล่นลงดังนี้

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/dropdown.py" method="post" target="_blank">
<select name="dropdown">
<option value="w3big" selected>本教程</option>
<option value="google">Google</option>
</select>
<input type="submit" value="提交"/>
</form>
</body>
</html>

รหัสสคริปต์ dropdown.py ดังนี้

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 引入 CGI 处理模块 
import cgi, cgitb 

# 创建 FieldStorage的实例 
form = cgi.FieldStorage() 

# 接收字段数据
if form.getvalue('dropdown'):
   dropdown_value = form.getvalue('dropdown')
else:
   dropdown_value = "没有内容"

print "Content-type:text/html"
print
print "<html>"
print "<head>"
print "<meta charset=\"utf-8\">"
print "<title>本教程 CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2> 选中的选项是:%s</h2>" % dropdown_value
print "</body>"
print "</html>"

ปรับเปลี่ยนสิทธิ์ dropdown.py:

chmod 755 dropdown.py

เบราว์เซอร์เข้าถึง Gif ชาร์ตที่นำเสนอ:


CGI จะใช้คุกกี้

โปรโตคอล HTTP ในอุปสรรคใหญ่เป็นความผิดที่จะตัดสินตัวตนของผู้ใช้ที่ให้โปรแกรมเมอร์จัดการที่ดีของความไม่สะดวก แต่ดูเหมือนฟังก์ชันคุกกี้ทำขึ้นสำหรับการขาดนี้

คุกกี้ที่กำลังเข้าถึงสคริปต์ในขณะที่ลูกค้าผ่านเบราว์เซอร์ของลูกค้าบนฮาร์ดดิสก์ของลูกค้าที่จะเขียนบันทึกข้อมูลการดึงข้อมูลเมื่อมีลูกค้าเยี่ยมชมสคริปต์ต่อไปเพื่อให้บรรลุฟังก์ชั่นของการกำหนดตัวตนคุกกี้ที่ใช้กันทั่วไปในการตรวจสอบตัวตน

ไวยากรณ์คุกกี้

คุกกี้ HTTP จะถูกส่งผ่านหัว HTTP เพื่อให้บรรลุเขามีการถ่ายโอนไฟล์ไวยากรณ์หัวตั้งคุกกี้จะเป็นดังนี้:

Set-cookie:name=name;expires=date;path=path;domain=domain;secure 
  • name = ชื่อ: กำหนดค่าของคุกกี้ (ชื่อไม่สามารถใช้ ";" และ "," จำนวน) เมื่อมีค่าหลายชื่อ ";" ที่จะแยกตัวอย่างเช่น: name1 = name1; name2 = name2 ; NAME3 = NAME3
  • หมดอายุ = วันที่: คุกกี้วันหมดอายุในรูปแบบ: หมดอายุ = "Wdy, DD- จันทร์-YYYY HH: MM: SS"
  • เส้นทาง = เส้นทาง: เส้นทางการตั้งค่าการสนับสนุนคุกกี้ถ้าเส้นทางเป็นเส้นทางคุกกี้สำหรับไฟล์และไดเรกทอรีย่อยทั้งหมดของรายการไดเรกทอรีมีผลบังคับใช้เช่น: เส้นทาง = "/ cgi-bin /" ถ้าเส้นทางไฟล์คุกกี้ มันหมายถึงการมีผลใช้บังคับของไฟล์นี้ตัวอย่างเช่น: เส้นทาง = "/ cgi-bin / cookie.cgi"
  • โดเมน = โดเมน: ชื่อโดเมนของคุกกี้ที่ถูกต้องตัวอย่างเช่น: โดเมน = "www.w3big.com"
  • การรักษาความปลอดภัย: ถ้าธงนี้จะได้รับว่าคุกกี้เท่านั้นที่สามารถส่งผ่านเซิร์ฟเวอร์ SSL โปรโตคอล HTTPS
  • คุกกี้จะได้รับโดยการตั้งค่าตัวแปรสภาพแวดล้อม HTTP_COOKIE ประสบความสำเร็จโปรแกรม CGI สามารถขอรับข้อมูลโดยเรียกตัวแปรคุกกี้

การตั้งค่าคุกกี้

การตั้งค่าคุกกี้ง่ายมากคุกกี้จะถูกส่งไปที่แยกหัว HTTP ตัวอย่างต่อไปนี้กำหนดชื่อและจะหมดอายุในคุกกี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 
print 'Content-Type: text/html'
print 'Set-Cookie: name="本教程";expires=Wed, 28 Aug 2016 18:30:00 GMT'
print
print """
<html>
	<head>
		<meta charset="utf-8">
		<title>本教程(w3big.com)</title>
	</head>
    <body>
        <h1>Cookie set OK!</h1>
    </body>
</html>
"""

บันทึกรหัสด้านบนเพื่อ cookie_set.py และปรับเปลี่ยนสิทธิ์ cookie_set.py:

chmod 755 cookie_set.py

ตัวอย่างข้างต้นใช้ส่วนหัวของคุกกี้ชุดการตั้งค่าข้อมูลคุกกี้ตัวเลือกการตั้งค่าคุกกี้คุณลักษณะอื่น ๆ เช่นหมดอายุเวลาหมดอายุโดเมนโดเมนเส้นทางเส้นทาง ข้อมูลนี้จะถูกให้: ก่อน "ชนิดของเนื้อหา text / html"


การดึงข้อมูลคุกกี้

คุกกี้หน้าการดึงข้อมูลเป็นเรื่องง่ายมากใน CGI ตัวแปรสภาพแวดล้อม HTTP_COOKIE, รูปแบบการจัดเก็บข้อมูลเป็นดังนี้ข้อมูลคุกกี้จะถูกจัดเก็บ:

key1=value1;key2=value2;key3=value3....

นี่คือโปรแกรม CGI ง่ายต่อการดึงข้อมูลคุกกี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 导入模块
import os
import Cookie

print "Content-type: text/html"
print

print """
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<h1>读取cookie信息</h1>
"""

if 'HTTP_COOKIE' in os.environ:
    cookie_string=os.environ.get('HTTP_COOKIE')
    c=Cookie.SimpleCookie()
    c.load(cookie_string)

    try:
        data=c['name'].value
        print "cookie data: "+data+"<br>"
    except KeyError:
        print "cookie 没有设置或者已过去<br>"
print """
</body>
</html>

"""

บันทึกรหัสด้านบนเพื่อ cookie_get.py และปรับเปลี่ยนสิทธิ์ cookie_get.py:

chmod 755 cookie_get.py

สีอื่น ๆ การตั้งค่า Gif คุกกี้มีดังนี้

ตัวอย่างของการอัปโหลดไฟล์

การตั้งค่าไฟล์ HTML เพื่ออัปโหลดต้องตั้งแอตทริบิวต์ enctype เพื่อ multipart / ข้อมูลรูปแบบรหัสดังต่อไปนี้:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
 <form enctype="multipart/form-data" 
                     action="/cgi-bin/save_file.py" method="post">
   <p>选中文件: <input type="file" name="filename" /></p>
   <p><input type="submit" value="上传" /></p>
   </form>
</body>
</html>

รหัส save_file.py ไฟล์สคริปต์เป็นดังนี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import cgi, os
import cgitb; cgitb.enable()

form = cgi.FieldStorage()

# 获取文件名
fileitem = form['filename']

# 检测文件是否上传
if fileitem.filename:
   # 设置文件路径 
   fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())

   message = '文件 "' + fn + '" 上传成功'
   
else:
   message = '文件没有上传'
   
print """\
Content-Type: text/html\n
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
   <p>%s</p>
</body>
</html>
""" % (message,)

บันทึกรหัสด้านบนเพื่อ save_file.py และปรับเปลี่ยนสิทธิ์ save_file.py:

chmod 755 save_file.py

สีอื่น ๆ การตั้งค่า Gif คุกกี้มีดังนี้

ถ้าคุณกำลังใช้ Unix / Linux คุณต้องแทนการแยกไฟล์ที่หน้าต่างจะต้องใช้เปิด () คำสั่งสามารถ:

fn = os.path.basename(fileitem.filename.replace("\\", "/" ))

ดาวน์โหลดแฟ้มกล่องโต้ตอบ

เราสร้างไฟล์ foo.txt ในไดเรกทอรีปัจจุบันสำหรับการดาวน์โหลดโปรแกรม

ดาวน์โหลดไฟล์โดยการตั้งค่าข้อมูลส่วนหัว HTTP เพื่อใช้โค้ดฟังก์ชั่นดังต่อไปนี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# HTTP 头部
print "Content-Disposition: attachment; filename=\"foo.txt\"";
print
# 打开文件
fo = open("foo.txt", "rb")

str = fo.read();
print str

# 关闭文件
fo.close()