Najlepszy samouczek Perl CGI Programowanie 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,nagłówek HTTP,Zmienne środowiskowe CGI,pliki do pobrania,Za pomocą metody GET przesyłania danych,Za pomocą metody POST, aby przekazać dane,,transfer danych Radio poprzez program CGI,textarea transferu danych przez program CGI,Program CGI do przekazywania danych za pośrednictwem rozwijanej,CGI służy Cookie,ustawienia cookies,moduł CGI,
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 rozszerzenie .cgi CGI, Perl może także używać rozszerzenia .pl.
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 .pl AddHandler, dzięki czemu możemy uzyskać dostęp do końcówkę .pl skryptu Perl:
AddHandler cgi-script .cgi .pl .py
Poniżej utworzyć plik test.cgi, kod jest w następujący sposób:
#!/usr/bin/perl print "Content-type:text/html\r\n\r\n"; print '<html>'; print '<head>'; print '<meta charset="utf-8">'; print '<title>本教程(w3write.com)</title>'; print '</head>'; print '<body>'; print '<h2>Hello Word! </h2>'; print '<p>来自本教程第一个 CGI 程序。</p>'; print '</body>'; print '</html>'; 1;
Następnie otwórz przeglądarkę http: //localhost/cgi-bin/test.cgi, wyniki wyjściowe są następujące:
Wyjście z pierwszej linii skryptu "Content-Type: text / html \ r \ n \ r \ n" zostanie wysłana do przeglądarki i powiedzieć, że przeglądarka wyświetli typu zawartości "text / html".
Zawartość pliku test.cgi 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\r\n\r\n
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/perl print "Content-type: text/html\n\n"; print '<meta charset="utf-8">'; print "<font size=+1>环境变量:</font>\n"; foreach (sort keys %ENV) { print "<b>$_</b>: $ENV{$_}<br>\n"; } 1;
Jeśli chcemy osiągnąć poprzez CGI Perl pobierania plików, wymaga innego zestawu informacji nagłówka w następujący sposób:
#!/usr/bin/perl # HTTP Header print "Content-Type:application/octet-stream; name=\"FileName\"\r\n"; print "Content-Disposition: attachment; filename=\"FileName\"\r\n\n"; # Actual File Content will go hear. open( FILE, "<FileName" ); while(read(FILE, $buffer, 100) ) { print("$buffer"); }
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/test.cgi?key1=value1&key2=value2GET wnioski dotyczące niektórych innych uwag:
Poniżej znajduje się prosty URL, używając metody GET wysłać dwóch parametrów programu test.cgi:
/cgi-bin/test.cgi?name=本教程&url=http://www.w3write.com
Plik Kod test.cgi:
#!/usr/bin/perl local ($buffer, @pairs, $pair, $name, $value, %FORM); # 读取文本信息 $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; } # 读取 name/value 对信息 @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%(pl)/pack("C", hex($1))/eg; $FORM{$name} = $value; } $name = $FORM{name}; $url = $FORM{url}; print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print '<meta charset="utf-8">'; print '<title>本教程(w3write.com)</title>'; print "</head>"; print "<body>"; print "<h2>$name网址:$url</h2>"; print "</body>"; print "</html>"; 1;
Sprawdź swoją przeglądarkę, wyniki wyjściowe są następujące:
Poniżej przedstawiono dwa wysłać dane do serwera za pomocą metody GET za pośrednictwem formularza HTML, przedstawiony ten sam dokument test.cgi skryptu serwera test 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/test.cgi" method="get"> 站点名称: <input type="text" name="name"> <br /> 站点 URL: <input type="text" name="url" /> <input type="submit" value="提交" /> </form> </body> </html>
Realizacja przeglądarka wyniki jest następująca:
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 znajduje również test.cgi, może również obsługiwać POST dane formularzy złożonych przez przeglądarkę:
#!/usr/bin/perl local ($buffer, @pairs, $pair, $name, $value, %FORM); # 读取文本信息 $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }else { $buffer = $ENV{'QUERY_STRING'}; } # 读取 name/value 对信息 @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%(pl)/pack("C", hex($1))/eg; $FORM{$name} = $value; } $name = $FORM{name}; $url = $FORM{url}; print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print '<meta charset="utf-8">'; print '<title>本教程(w3write.com)</title>'; print "</head>"; print "<body>"; print "<h2>$name网址:$url</h2>"; print "</body>"; print "</html>"; 1;
Poniżej przedstawiono dwa wysłać dane do serwera za pomocą metody GET za pośrednictwem formularza HTML, przedstawiony ten sam dokument test.cgi skryptu serwera test 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/test.cgi" method="post"> 站点名称: <input type="text" name="name"> <br /> 站点 URL: <input type="text" name="url" /> <input type="submit" value="提交" /> </form> </body> </html>
Realizacja przeglądarka wyniki jest następująca:
pole wykorzystywane do przedstawienia jednego lub więcej danych opcji, test 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/test.cgi" 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 test.cgi:
#!/usr/bin/perl local ($buffer, @pairs, $pair, $name, $value, %FORM); # 读取信息 $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }else { $buffer = $ENV{'QUERY_STRING'}; } # 读取 name/value 对信息 @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%(pl)/pack("C", hex($1))/eg; $FORM{$name} = $value; } if( $FORM{w3big} ){ $w3big_flag ="ON"; }else{ $w3big_flag ="OFF"; } if( $FORM{google} ){ $google_flag ="ON"; }else{ $google_flag ="OFF"; } print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print '<meta charset="utf-8">'; print '<title>本教程(w3write.com)</title>'; print "</head>"; print "<body>"; print "<h2> 本教程选中状态 : $w3big_flag</h2>"; print "<h2> Google 选择状态 : $google_flag</h2>"; print "</body>"; print "</html>"; 1;
Realizacja przeglądarka wyniki jest następująca:
Radiowego przesyłania danych tylko do serwera test kod jest następujący:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>本教程(w3write.com)</title> </head> <body> <form action="/cgi-bin/test.cgi" 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>
Kod skryptu test.cgi przedstawia się następująco:
#!/usr/bin/perl local ($buffer, @pairs, $pair, $name, $value, %FORM); # 读取信息 $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }else { $buffer = $ENV{'QUERY_STRING'}; } # 读取 name/value 对信息 @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%(pl)/pack("C", hex($1))/eg; $FORM{$name} = $value; } $site = $FORM{site}; print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print '<meta charset="utf-8">'; print '<title>本教程(w3write.com)</title>'; print "</head>"; print "<body>"; print "<h2> 选择的网站 $site</h2>"; print "</body>"; print "</html>"; 1;
Realizacja przeglądarka wyniki jest następująca:
Textarea przekazać wiele wierszy danych do serwera, test 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/test.cgi" method="post" target="_blank"> <textarea name="textcontent" cols="40" rows="4"> 在这里输入内容pl. </textarea> <input type="submit" value="提交" /> </form> </body> </html>
Kod skryptu test.cgi przedstawia się następująco:
#!/usr/bin/perl local ($buffer, @pairs, $pair, $name, $value, %FORM); # 读取信息 $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }else { $buffer = $ENV{'QUERY_STRING'}; } # 读取 name/value 对信息 @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%(pl)/pack("C", hex($1))/eg; $FORM{$name} = $value; } $text_content = $FORM{textcontent}; print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print '<meta charset="utf-8">'; print '<title>本教程(w3write.com)</title>'; print "</head>"; print "<body>"; print "<h2>输入的文本内容为:$text_content</h2>"; print "</body>"; print "</html>"; 1;
Realizacja przeglądarka wyniki jest następująca:
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/test.cgi" 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>
test.cgi kod skryptu w następujący sposób:
#!/usr/bin/perl local ($buffer, @pairs, $pair, $name, $value, %FORM); # 读取信息 $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }else { $buffer = $ENV{'QUERY_STRING'}; } # 读取 name/value 对信息 @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%(pl)/pack("C", hex($1))/eg; $FORM{$name} = $value; } $site = $FORM{dropdown}; print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print '<meta charset="utf-8">'; print '<title>本教程(w3write.com)</title>'; print "</head>"; print "<body>"; print "<h2>选择的网站是:$site</h2>"; print "</body>"; print "</html>"; 1;
Realizacja przeglądarka wyniki jest następująca:
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 identyfikator użytkownika, hasło i wygasa w pliku cookie:
#!/usr/bin/perl print "Set-Cookie:UserID=XYZ;\n"; print "Set-Cookie:Password=XYZ123;\n"; print "Set-Cookie:Expires=Tuesday, 31-Dec-2017 23:12:40 GMT";\n"; print "Set-Cookie:Domain=www.w3write.com;\n"; print "Set-Cookie:Path=/perl;\n"; print "Content-type:text/html\r\n\r\n"; plplplplpl.其他 HTML 内容
Cookie stronę wyszukiwania informacji jest bardzo proste, w CGI Zmienne środowiskowe HTTP_COOKIE, format przechowywania jest następująca informacja jest przechowywana Cookie:
#!/usr/bin/perl $rcvd_cookies = $ENV{'HTTP_COOKIE'}; @cookies = split /;/, $rcvd_cookies; foreach $cookie ( @cookies ){ ($key, $val) = split(/=/, $cookie); # splits on the first =. $key =~ s/^\s+//; $val =~ s/^\s+//; $key =~ s/\s+$//; $val =~ s/\s+$//; if( $key eq "UserID" ){ $user_id = $val; }elsif($key eq "Password"){ $password = $val; } } print "User ID = $user_id\n"; print "Password = $password\n";
Powyższy przykład wyjście jest:
User ID = XYZ Password = XYZ123
Perl CGI zapewnia wiele wbudowanych modułów, wykorzystywane następujących dwóch kryteriów: