CGI란
CGI는 현재 NCSA에서 관리하고 있습니다. NCSA는 CGI를 다음과 같이 정의합니다.
CGI(Common Gateway Interface), 공통 게이트웨이 인터페이스는 HTTP 서버와 같은 서버에서 실행되는 프로그램으로 클라이언트의 HTML 페이지에 대한 인터페이스를 제공합니다.
웹 탐색
CGI의 작동 방식을 더 잘 이해하려면 웹 페이지의 링크나 URL을 클릭하는 과정부터 시작해 보세요.
1. 브라우저는 URL에 액세스하고 HTTP 웹 서버에 연결합니다.
2. 웹 서버는 요청 정보를 받은 후 URL을 구문 분석하여 해당 파일이 서버에 존재하는지 확인하고 파일이 존재하면 파일 내용을 반환합니다. 오류 메시지.
3. 브라우저는 서버로부터 정보를 받아 수신된 파일이나 오류 메시지를 표시합니다.
CGI 프로그램은 Python 스크립트, PERL 스크립트, SHELL 스크립트, C 또는 C++ 프로그램 등이 될 수 있습니다.
CGI 아키텍처 다이어그램
웹 서버 지원 및 구성
CGI 프로그래밍을 수행하기 전에 웹 서버가 CGI 및 CGI 처리기가 구성되었습니다.
Apache는 CGI 구성을 지원합니다.
CGI 디렉터리 설정:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
모든 HTTP 서버 실행 CGI 프로그램은 미리 구성된 디렉터리에 저장됩니다. 이 디렉토리를 CGI 디렉토리라고 하며 관례적으로 이름은 /var/www/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로 끝나는 Python 스크립트 파일:
AddHandler cgi-script .cgi .pl .py
첫 번째 CGI 프로그램
Python을 사용하여 첫 번째 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" 스크립트의 첫 번째 줄의 출력 내용이 브라우저로 전송되고 표시된 콘텐츠 유형이 다음과 같다고 브라우저에 알려줍니다. "텍스트/html".
print를 사용하여 빈 줄을 출력하여 서버에 헤더 정보를 끝내도록 지시합니다.
HTTP 헤더
hello.py 파일 콘텐츠의 "Content-type: text/html"은 HTTP 헤더의 일부로, 브라우저에 전송되어 브라우저에 파일.
HTTP 헤더의 형식은 다음과 같습니다.
HTTP 字段名: 字段内容
예:
Content-type: text/html
다음은 CGI 환경 변수를 출력하는 간단한 CGI 스크립트입니다.
#!/usr/bin/python# -*- coding: UTF-8 -*-# filename:test.pyimport osprint "Content-type: text/html"printprint "<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>"
GET 및 POST 방식
브라우저 클라이언트는 두 가지 방식으로 서버에 정보를 전송하는데, 이 두 가지 방식은 GET 방식과 POST 방식입니다.
使用GET方法传输数据
GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面的URL上,以"?"号分割, 如下所示:
www.test.com/cgi-bin/hello.py?key1=value1&key2=value2
有关 GET 请求的其他一些注释:
GET 请求可被缓存
GET 请求保留在浏览器历史记录中
GET 请求可被收藏为书签
GET 请求不应在处理敏感数据时使用
GET 请求有长度限制
GET 请求只应当用于取回数据
简单的url实例:GET方法
以下是一个简单的URL,使用GET方法向hello_get.py程序发送两个参数:
/cgi-bin/test.py?name=菜鸟教程&url=www.runoob.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"printprint "<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的表单使用GET方法向服务器发送两个数据,提交的服务器脚本同样是hello_get.py文件,hello_get.html 代码如下:
<!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.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>
【相关推荐】
2. 分享在IIS上用CGI方式运行Python脚本的实例教程
위 내용은 CGI란 무엇입니까? Python CGI 프로그래밍에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!