網頁

2014年6月23日 星期一

如何用python建立可以吃POST資訊的 cgi server ?

老實說,我還真的不太會寫python以及cgi或是web相關的程式。

 藉著這次工作上要寫一個update的功能,就順便學習一下 :)

 首先在網路上找到下面這個: (server.py)
#!/usr/bin/env python

import BaseHTTPServer

import CGIHTTPServer

import cgitb; cgitb.enable()  ## This line enables CGI error reporting



server = BaseHTTPServer.HTTPServer

handler = CGIHTTPServer.CGIHTTPRequestHandler

server_address = ("", 8000)

handler.cgi_directories = ["/"]



httpd = server(server_address, handler)

httpd.serve_forever()

然後,又在網路上找到下面這個: (test_cgi.py)
!/usr/bin/env python
import cgi, cgitb
form = cgi.FieldStorage()

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print ("Content-type:text/html\r\n\r\n")
print ("<html>")
print ("<head>")
print ("<title>Hello - Second CGI Program</title>")
print ("</head>")
print ("<body>")
print ("<h2>Hello %s %s</h2>" % (first_name, last_name))
print ("</body>")
print ("</html>")

然後把這兩個東西放到你的網頁資料夾下,
以Ubuntu的apache2來說的話是在 /var/www 下。
稍為檢查一下權限,阿,不太會設,都給它755下去好了


chmod 755 server.py
chmod 755 test_cgi.py

接下來就run server.py
./server.py


喔太棒了,block住了,看來應該是有在跑。
開個chrome驗證一下好了:
http://192.168.21.15:8000/test_cgi.py

哦在網頁上看到

Hello None None


哈,對,最後一步來用wget來測一下吧 : )

wget --post-data "first_name=vincent&last_name=yang" http://192.168.21.15:8000/test_cgi.py


哈,得到這樣的 file

<html>

<head>

<title>Hello - Second CGI Program</title>

</head>

<body>

<h2>Hello vincent yang</h2>

</body>

</html>



看來我們已經完成自己的 cgi ,並且可以依據client傳過來的 POST 資料給予不同的回應。
接下來怎麼變化就有很多種玩法了。

沒有留言:

張貼留言