(+84) 236.3827111 ex. 402

Kỹ thuật lập trình CGI trong Python


Cấu hình Web Server

Trước khi tiến hành lập trình CGI, bạn đảm bảo rằng Web Server của bạn hỗ trợ CGI và được cấu hình để xử lý các chương trình CGI. Tất cả chương trình CGI được thực thi bởi HTTP đều được giữ trong một thư mục đã được cấu hình trước.

Thư mục này được gọi là CGI Directory và theo qui ước nó được đặt tên dạng /var/www/cgi-bin. Các CGI file có đuôi là .cgi, nhưng bạn cũng có thể giữ các file trong .py.

Theo mặc định, Linux Server được cấu hình để chạy các script trong thư mục cgi-bin trong /var/www. Nếu bạn muốn xác định bất kỳ thư mục nào khác để chạy CGI script của bạn, thì bạn comment các dòng sau trong httpd.conf file:

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


<> "/var/www/cgi-bin">
Options All

Chương trình CGI đầu tiên

Dưới đây là một CGI script có tên là hello.py, được giữ trong thư mục /var/www/cgi-bin. Trước khi chạy, bạn cần thay đổi mode của file này bởi sử dụng chmod 755 hello.py để làm file này có thể thực thi.

 

print "Content-type:text/html\r\n\r\n"
print ''
print ''
print 'Lap trinh CGI trong Python'
print ''
print ''
print '

Day la chuong trinh CGI dau tien trong Python

'
print '' print ''

Kết quả là:

Day la chuong trinh CGI dau tien trong Python

Đây là một Python script đơn giản để viết kết quả trên STDOUT chuẩn là màn hình. Dòng Content-type:text/html\r\n\r\n được gửi trở lại trình duyệt và nó xác định kiểu nội dung để được hiển thị trên màn hình trình duyệt.

HTTP Header

Dòng Content-type:text/html\r\n\r\n là một phần của HTTP Header mà được gửi tới trình duyệt để giúp trình duyệt hiểu nội dung cần được hiển thị. Tất cả HTTP Header sẽ là trong form sau:

HTTP Ten Truong: Noi Dung Cua Truong

Vi du
Content-type: text/html\r\n\r\n

Dưới đây là một số HTTP Header quan trọng khác mà bạn sẽ sử dụng thường xuyên trong lập trình CGI:

Header Miêu tả
Content-type: Một chuỗi MIME định nghĩa định dạng của file được trả về. Ví dụ Content-type:text/html
Expires: Date Ngày mà thông tin trở nên hết hiệu lực. Nó được sử dụng bởi trình duyệt để xác định khi nào trang cần được refresh. Một chuỗi date hợp lệ là trong định dạng 01 Jan 1998 12:00:00 GMT.
Location: URL URL mà được trả về thay cho URL đã được yêu cầu. Bạn có thể sử dụng trường này để chuyển hướng một yêu cầu tới bất kỳ file nào
Last-modified: Date Ngày sửa đổi cuối cùng của nguồn
Content-length: N Độ dài (số byte) của dữ liệu đang được trả về. Trình duyệt sử dụng giá trị này để báo cáo thời gian download ước lượng cho một file
Set-Cookie: String Thiết lập cookie được truyền thông qua String

Các biến môi trường của CGI

Tất cả chương trình CGI có quyền truy cập tới các biến môi trường sau. Các biến này đóng một vai trò quan trọng trong khi viết bất cứ chương trình CGI nào.

Tên biến Miêu tả
CONTENT_TYPE Kiểu dữ liệu của nội dung. Được sử dụng khi Client đang gửi nội dung đính kèm tới Server. Ví dụ: file upload
CONTENT_LENGTH Độ dài của thông tin truy vấn. Chỉ có sẵn cho các yêu cầu POST
HTTP_COOKIE Trả về các Cookie đã thiết lập trong dạng là cặp key/value
HTTP_USER_AGENT Trường User-Agent chứa thông tin về user agent tạo yêu cầu. Đây là tên của trình duyệt web
PATH_INFO Path cho CGI script
QUERY_STRING Thông tin mã hóa URL được gửi với phương thức GET
REMOTE_ADDR Địa chỉ IP của host từ xa mà tạo yêu cầu. Biến này hữu ích cho log và xác nhận
REMOTE_HOST Tên đầy đủ của host tạo yêu cầu. Nếu thông tin này không có sẵn, thì REMOTE_ADDR có thể được sử dụng để lấy địa chỉ IP
REQUEST_METHOD Phương thức được sử dụng để tạo yêu cầu. Phương thức được sử dụng phổ biên là GET và POST
SCRIPT_FILENAME Path đầy đủ tới CGI script
SCRIPT_NAME Tên của CGI script
SERVER_NAME Tên của CGI script
SERVER_SOFTWARE Tên và phiên bản của phần mềm mà Server đang chạy trên đó

Chương trình CGI sau sẽ liệt kê tất cả các biến CGI.

 

import os

print "Content-type: text/html\r\n\r\n";
print "Environment<\br>";
for param in os.environ.keys():
  print "%20s: %s<\br>" % (param, os.environ[param])