การเขียนโปรแกรม 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
การกำหนดค่าเซิร์ฟเวอร์เว็บและการสนับสนุน
ก่อนที่จะทำการเขียนโปรแกรม 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()