Najlepszy samouczek Programowanie CGI Pythona W 2024 r. W tym samouczku możesz dowiedzieć się Co to jest CGI,przeglądanie stron internetowych,Wykres CGI,Konfiguracja serwera WWW i wsparcie,Pierwszy program CGI,nagłówek HTTP,Zmienne środowiskowe CGI,GET i POST metody,CGI służy Cookie,ustawienia cookies,Pobieranie informacji Cookie,Okno dialogowe Pobieranie pliku,
CGI jest utrzymywane przez NCSA NCSA CGI jest zdefiniowany w następujący sposób:
CGI (Common Gateway Interface), Common Gateway Interface, który to program uruchomiony na serwerze, na przykład: Serwer HTTP, interfejs kliencki z tej samej strony HTML.
Aby lepiej zrozumieć, jak działa CGI, możemy kliknąć na link na stronie internetowej lub adresu URL procesu:
Programy CGI może być skrypt Python, Perl skrypt, skrypt powłoki, C lub C ++ programy.
Przed przeprowadzić programowanie CGI, upewnij się, że serwer WWW został skonfigurowany do obsługi CGI oraz obsługi CGI.
Apache obsługuje konfigurację CGI:
Konfigurowanie katalogu CGI:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Wszystkie serwer HTTP w celu wykonania programów CGI są zapisywane we wstępnie skonfigurowane katalogu. Ten katalog jest nazywany katalogu CGI, a zgodnie z przyjętą konwencją, to nazywa się w katalogu / var / www / cgi-bin.
Plik CGI rozszerzenie .cgi, python można również użyć rozszerzenie .py.
Domyślnie konfiguracja serwera Linux działa katalogu cgi-bin jest / var / www.
Jeśli chcesz określić inny katalog do uruchamiania skryptów CGI, można zmodyfikować plik konfiguracyjny httpd.conf w następujący sposób:
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory>
Dodaj przyrostek .py AddHandler, dzięki czemu możemy uzyskać dostępu do pliku skryptowego Python koniec .py:
AddHandler cgi-script .cgi .pl .py
Używamy Pythona do utworzenia pierwszego programu CGI o nazwie hello.py, plik znajduje się w katalogu / var / www katalogu / cgi-bin, co następuje:
#!/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>'
Po zapisaniu modyfikacji pliku hello.py, zmodyfikować uprawnienia plików do 755:
chmod 755 hello.py
Powyższy program jest wyświetlana w przeglądarce dostępu wyniki przedstawiają się następująco:
Hello.py ten skrypt jest prosty skrypt w Pythonie, skrypt pierwszej linii wyjście "Content-Type: text / html", aby wysłać do rodzaju przeglądarki i poinformować przeglądarkę, aby wyświetlić zawartość jako "text / html".
wydruk z pustą linią służy powiedzieć koniec serwera informacji nagłówka.
hello.py zawartość pliku w: część nagłówka HTTP jest "Content-type text / html", zostanie ona wysłana do typu zawartości przeglądarka informuje pliki przeglądarki.
Format nagłówek HTTP jest następujący:
HTTP 字段名: 字段内容
Na przykład:
Content-type: text/html
Poniższa tabela przedstawia informacje w programach CGI nagłówka HTTP są często używane:
głowa | opis |
---|---|
Content-type: | Podmiot MIME odpowiadające żądanie informacji. Na przykład: Content-Type: text / html |
Wygasa: Data | data i czas reakcji wygasł |
Lokalizacja: URL | Aby przekierować odbiorcę na żądanie zakaz lokalizacji URL o uzupełnienie wniosku lub identyfikacji nowych zasobów |
Last modified: Data | Żądany zasób został ostatnio modyfikowany |
Content-Length: N | Żądanie Content-Length |
Set-Cookie: String | Ustawienia HTTP Cookie |
Wszystkie programy CGI otrzymały następujące zmienne środowiskowe, które odegrały ważną rolę w programie CGI:
Nazwa zmiennej | opis |
---|---|
CONTENT_TYPE | Wartość ta wskazuje, że zmiennej środowiskowej do typu MIME przekazywania informacji. Obecnie, zmienne środowiskowe są zwykle CONTENT_TYPE: application / x-www-form-urlencoded, powiedział, że dane z formularza HTML. |
CONTENT_LENGTH | Jeśli informacje Serwer tryb transferu i program CGI jest POST, nawet jeśli zmienna środowiskowa wejścia STDIN liczba bajtów, które można odczytać aktualne dane z normą. Ta zmienna podczas odczytu danych wejściowych muszą być użyte. |
HTTP_COOKIE | Zawartość COOKIE w kliencie. |
HTTP_USER_AGENT | Dostarczanie informacji zawiera numer wersji przeglądarki klienta lub innych poufnych danych. |
PATH_INFO | Wartość tej zmiennej środowiskowej wskazuje nazwę programu CGI natychmiast po informacji dodatkowej ścieżki. często pojawia się on jako program CGI argumentem. |
QUERY_STRING | Jeśli informacje Serwer tryb transferu i program CGI jest informacja GET, wartość tej zmiennej środowiskowej nawet jeśli minął. Informacje te są następnie nazwę programu CGI, zarówno w środku ze znakiem zapytania "?" Separatora. |
REMOTE_ADDR | Wartość tej zmiennej środowiskowej jest adres IP klienta wysyła żądanie, na przykład, powyższa 192.168.1.67. Wartość ta jest zawsze obecny. I to jest konieczność zapewnienia klient internetowy unikalnego identyfikatora serwera sieci Web mogą być wykorzystane w programach CGI odróżnić innego klienta sieci Web. |
REMOTE_HOST | Wartość tej zmiennej środowiskowej zawiera nazwę hosta żądającego klienta CGI. Jeśli nie chcesz, by sprawdzić, nie trzeba zdefiniować tę zmienną. |
REQUEST_METHOD | Zapewnia metody nazywanej skrypt. Dla scenariusza HTTP / 1.0 protokołu tylko GET i POST znaczące. |
SCRIPT_FILENAME | Pełna ścieżka do skryptów CGI |
SCRIPT_NAME | Nazwa skryptu CGI |
SERVER_NAME | Jest to nazwa hosta, alias lub adres IP serwera sieci Web. |
SERVER_SOFTWARE | Wartość tej zmiennej środowiskowej zawiera wywołanie CGI nazwę programu i numer wersji serwera HTTP. Na przykład, powyższa wartość Apache / 2.2.14 (Unix) |
Oto prosty skrypt CGI zmienne środowiskowe CGI wyjście:
#!/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>"
Zapisz powyższych punktów test.py i modyfikować uprawnienia plików do 755, wyniki wykonania są następujące:
Przeglądarka klienta do serwera w celu dostarczenia informacji na dwa sposoby, z których oba metoda jest GET i metody POST.
GET do wysyłania zakodowanych danych użytkownika do serwera, dane informacyjne jest zawarty w adresie URL żądania strony do liczby dzielą się na "?":
http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2GET wnioski dotyczące niektórych innych uwag:
Poniżej znajduje się prosty URL, używając metody GET wysłać dwa parametry hello_get.py programu:
/cgi-bin/test.py?name=本教程&url=http://www.w3write.com
Plik Kod 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>"
Po zapisaniu modyfikacji pliku hello_get.py, zmodyfikować uprawnienia plików do 755:
chmod 755 hello_get.py
Przeglądarka żąda wyjście:
Poniżej przedstawiono dwa wysłać dane do serwera za pomocą metody GET za pośrednictwem formularza HTML, przedstawiony ten sam plik hello_get.py skryptu serwera, kod hello_get przedstawia się następująco:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3write.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>
Domyślnie katalog cgi-bin może przechowywać plik skryptu, będziemy w katalogu testowym, należy zmodyfikować plik uprawnienia hello_get przechowywane jako 755:
chmod 755 hello_get
Gif prezentacji jest następujący:
Korzystanie z metody POST, aby przekazać dane do serwera jest bardziej bezpieczne i niezawodne, jak niektórzy poufnych informacji, takich jak hasła użytkownika należy użyć POST do przesyłania danych.
Poniżej również hello_get.py, może również obsługiwać POST dane formularzy złożonych przez przeglądarkę:
#!/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>"
Poniżej znajduje się formularz do przekazywania danych do hello_get.py skryptu serwer metodą POST (method = "post"):
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3write.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 prezentacji jest następujący:
pole wykorzystywane do przedstawienia jednego lub więcej danych opcji, HTML kod jest w następujący sposób:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3write.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>
Plik Kod 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>"
Modyfikacja checkbox.py uprawnienia:
chmod 755 checkbox.py
Przeglądarka Dostęp Gif wykresy prezentacji:
Radiowego przesyłania danych tylko do serwera kod HTML jest następujący:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3write.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 kod skryptu jest następująca:
#!/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>"
Modyfikacja radiobutton.py uprawnienia:
chmod 755 radiobutton.py
Przeglądarka Dostęp Gif wykresy prezentacji:
Textarea przekazać wiele wierszy danych do serwera, HTML kod jest w następujący sposób:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3write.com)</title> </head> <body> <form action="/cgi-bin/textarea.py" method="post" target="_blank"> <textarea name="textcontent" cols="40" rows="4"> 在这里输入内容pl. </textarea> <input type="submit" value="提交" /> </form> </body> </html>
textarea.py kod skryptu jest następująca:
#!/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>"
Modyfikacja uprawnień textarea.py:
chmod 755 textarea.py
Przeglądarka Dostęp Gif wykresy prezentacji:
Kod HTML pole rozwijane w sposób następujący:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3write.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 kod skryptu w następujący sposób:
#!/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>"
Modyfikacja dropdown.py uprawnienia:
chmod 755 dropdown.py
Przeglądarka Dostęp Gif wykresy prezentacji:
Protokół HTTP w wielkim wadą jest źle ocenić tożsamości użytkownika, które dają programistom wiele niedogodności, ale wydaje funkcjonalności cookies nadrabiał ten niedobór.
cookies, które uzyskuje dostęp do skryptu, a klient przez przeglądarkę klienta na kliencie twardym pisać rekordy danych, pobieranie danych, gdy klient odwiedza kolejny skrypt, tak aby osiągnąć funkcję określania tożsamości, ciasteczka powszechnie stosowane przy weryfikacji tożsamości.
Http cookie jest wysyłane za pośrednictwem nagłówka HTTP osiągnąć, musiał przesyłać pliki, składni header set-Cookie to w następujący sposób:
Set-cookie:name=name;expires=date;path=path;domain=domain;secure
Ustawienia cookies jest bardzo prosta, ciasteczko zostanie wysłane osobno w nagłówku HTTP. Poniższy przykład ustawia nazwę i wygasa w pliku cookie:
#!/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>本教程(w3write.com)</title> </head> <body> <h1>Cookie set OK!</h1> </body> </html> """
Zapisz powyższy kod do cookie_set.py i modyfikować cookie_set.py uprawnienia:
chmod 755 cookie_set.py
Powyższe przykłady użyć nagłówka Set-Cookie, aby ustawić informacje Cookie, opcje ustawione Cookie inne atrybuty, takie jak po upływie tego terminu, domeny, domeny, Ścieżka Ścieżka. Te informacje są dostarczane: Przed "Content-type text / html".
Cookie stronę wyszukiwania informacji jest bardzo proste, w CGI Zmienne środowiskowe HTTP_COOKIE, format przechowywania jest następująca informacja jest przechowywana Cookie:
key1=value1;key2=value2;key3=value3plpl
Oto prosty program CGI do pobierania informacji cookie:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 导入模块 import os import Cookie print "Content-type: text/html" print print """ <html> <head> <meta charset="utf-8"> <title>本教程(w3write.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> """
Zapisz powyższy kod do cookie_get.py i modyfikować cookie_get.py uprawnienia:
chmod 755 cookie_get.py
Ustawienia cookies Gif Więcej kolorów są następujące:
Plik HTML załadować ustawienia trzeba ustawić atrybut enctype do multipart / form-data, kod w następujący sposób:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3write.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>
Kod save_file.py plik skryptu jest następująca:
#!/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>本教程(w3write.com)</title> </head> <body> <p>%s</p> </body> </html> """ % (message,)
Zapisz powyższy kod do save_file.py i modyfikować save_file.py uprawnienia:
chmod 755 save_file.py
Ustawienia cookies Gif Więcej kolorów są następujące:
Jeśli używasz Unix / Linux, należy zastąpić separator plików w oknie wystarczy użyć open () oświadczenie może być:
fn = os.path.basename(fileitem.filename.replace("\\", "/" ))
Tworzymy plik foo.txt w bieżącym katalogu do pobrania programu.
Pobierz plik przez ustawienie nagłówka HTTP informacji wdrożyć kod funkcji jest następująca:
#!/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()