Das beste Perl-CGI-Programmierung-Tutorial im Jahr 2024. In diesem Tutorial können Sie Was ist CGI,Web-Browsing,CGI-Diagramm,Web-Server-Konfiguration und Support,HTTP-Header,CGI-Umgebungsvariablen,Downloads,Verwenden Sie die GET-Methode zur Übertragung von Daten,Verwenden Sie die POST-Methode Daten zu übergeben,,Funkdatenübertragung via CGI-Programm,Textarea Übertragung von Daten via CGI-Programm,CGI-Programm für die Datenübertragung durch den Pull-down,CGI wird genutzt, Plätzchen,Cookie-Einstellungen,CGI-Modul, lernen
CGI derzeit verwaltet von NCSA, NCSA CGI ist wie folgt definiert:
CGI (Common Gateway Interface), Common Gateway Interface, das ein Programm auf dem Server ausgeführt wird, wie zum Beispiel: HTTP-Server, die Client-Schnittstelle die gleiche HTML-Seite bereitstellt.
Um besser zu verstehen, wie CGI funktioniert, können wir auf einen Link klicken Sie auf einer Webseite oder URL des Prozesses:
CGI-Programme können ein Python-Skript, PERL-Skript, Shell-Skript, C oder C ++ Programme sein.
Bevor Sie die CGI-Programmierung durchführen, stellen Sie sicher, dass Ihr Webserver konfiguriert wurde CGI und CGI-Handler zu unterstützen.
Apache unterstützt CGI-Konfiguration:
Stellen Sie das CGI-Verzeichnis auf:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Alle HTTP-Server CGI-Programme auszuführen, werden in einem vorkonfigurierten Verzeichnis gespeichert. Dieses Verzeichnis ist das CGI-Verzeichnis genannt, und durch Konvention, es heißt / var / www / cgi-bin-Verzeichnis.
CGI Dateierweiterung .cgi kann Perl auch die .pl-Erweiterung verwenden.
Standardmäßig Linux-Server-Konfiguration cgi-bin-Verzeichnis ausgeführt wird, ist / var / www.
Wenn Sie ein anderes Verzeichnis angeben möchten, CGI-Skripte ausführen, können Sie die Konfigurationsdatei httpd.conf wie folgt ändern:
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory>
In Suffix .pl AddHandler, so können wir das Ende des .pl Perl-Script-Datei zugreifen:
AddHandler cgi-script .cgi .pl .py
Im Folgenden eine test.cgi Datei zu erstellen, wird der Code wie folgt:
#!/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;
Dann öffnen Sie Ihren Browser auf http:, //localhost/cgi-bin/test.cgi Ausgabeergebnisse sind wie folgt:
Der Ausgang der ersten Zeile des Skripts "Content-type: text / html \ r \ n \ r \ n" an den Browser und geben dem Browser den Content-Type "text / html" angezeigt werden gesendet.
test.cgi Dateiinhalt in: Teil des HTTP-Header "Content-Type text / html", wird sie an den Browser-Inhaltstyp zeigt die Dateien Browser gesendet werden.
HTTP-Header-Format ist wie folgt:
HTTP 字段名: 字段内容
Zum Beispiel:
Content-type:text/html\r\n\r\n
Die folgende Tabelle beschreibt die Informationen in den HTTP-Header CGI-Programme werden häufig verwendet:
Kopf | Beschreibung |
---|---|
Content-type: | MIME-Einheit an die Informationsanforderung entspricht. Zum Beispiel: Content-type: text / html |
Gültig bis: Datum | Antwort Datum und Zeit abgelaufen |
Standort: URL | Um den Empfänger in einen nicht-location URL Anfrage umleiten die Anfrage oder die Identifizierung neuer Ressourcen zu vervollständigen |
Last-Modified: Datum | Die angeforderte Ressource wurde zuletzt geändert |
Content-length: N | Content-Length-Anfrage |
Set-Cookie: String | Http Cookie-Einstellungen |
Alle CGI-Programme haben die folgenden Umgebungsvariablen erhalten, die eine wichtige Rolle in der CGI-Programm gespielt:
Variablenname | Beschreibung |
---|---|
CONTENT_TYPE | Dieser Wert zeigt an, dass die Umgebungsvariable auf den MIME-Typ der Informationsübertragung. Derzeit sind die Umgebungsvariablen im Allgemeinen CONTENT_TYPE: application / x-www-form-urlencoded, sagte er, dass die Daten aus dem HTML-Formular. |
CONTENT_LENGTH | Wenn der Übertragungsmodus-Server und CGI-Programminformationen POST, selbst wenn die Umgebungsvariable STDIN Eingabe der Anzahl von Bytes, die gültige Daten aus dem Standard gelesen werden kann. Diese Umgebungsvariable, wenn die Eingabedaten Lesen verwendet werden. |
HTTP_COOKIE | COOKIE Inhalt innerhalb des Client. |
HTTP_USER_AGENT | Die Bereitstellung von Informationen enthält die Versionsnummer der Client-Browser oder andere urheberrechtlich geschützte Daten. |
PATH_INFO | Der Wert dieser Umgebungsvariable gibt den Namen des CGI-Programms unmittelbar nach dem zusätzlichen Pfadinformationen. Oft scheint es, als Argument CGI-Programm. |
QUERY_STRING | Wenn der Übertragungsmodus-Server und CGI-Programminformationen Informationen zu erhalten, um den Wert dieser Umgebungsvariablen selbst wenn weitergegeben. Diese Information wird durch den Namen des CGI-Programms, die beide in der Mitte mit einem Fragezeichen "?" Separator gefolgt. |
REMOTE_ADDR | Der Wert dieser Umgebungsvariablen ist die IP-Adresse des Client eine Anfrage sendet, beispielsweise die oben 192.168.1.67. Dieser Wert ist immer vorhanden. Und es ist die Notwendigkeit der Web-Client auf dem Webserver die eindeutige Kennung zu schaffen, in CGI-Programmen verwendet werden, um zwischen verschiedenen Web-Client zu unterscheiden. |
REMOTE_HOST | Der Wert dieser Umgebungsvariable enthält den Host-Namen des anfordernden Clients von CGI. Wenn es Sie nicht überprüfen möchten, brauchen Sie nicht diese Umgebungsvariable zu definieren. |
REQUEST_METHOD | Es stellt eine Methode namens Skript. Für HTTP / 1.0-Protokoll-Skript nur GET und POST sinnvoll. |
SCRIPT_FILENAME | Der vollständige Pfad zum CGI-Skripten |
SCRIPT_NAME | Der Name des CGI-Skript |
SERVER_NAME | Dies ist der Hostname, Alias oder IP-Adresse Ihres Web-Server. |
SERVER_SOFTWARE | Der Wert dieser Umgebungsvariable enthält den Aufruf CGI Programmnamen und die Versionsnummer des HTTP-Servers. Zum Beispiel kann der obige Wert von Apache / 2.2.14 (Unix) |
Hier ist ein einfaches CGI-Skript-Ausgabe CGI-Umgebungsvariablen:
#!/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;
Wenn wir durch Perl-CGI-Datei-Downloads erreichen wollen, benötigen einen anderen Satz von Header-Informationen wie folgt:
#!/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 Methode, um die codierten Benutzerinformationen an den Server zu senden, unterteilt die Dateninformationen in der URL der Seite Anfrage Nummer enthalten ist, wie folgt "?":
http://www.test.com/cgi-bin/test.cgi?key1=value1&key2=value2GET-Anfragen über einige der anderen Kommentare:
Hier finden Sie eine einfache URL, GET-Methode unter Verwendung von zwei Parametern test.cgi Programm zu senden:
/cgi-bin/test.cgi?name=本教程&url=http://www.w3write.com
Ein Code test.cgi Datei:
#!/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/%(de)/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;
Überprüfen Sie Ihre Browser sind die Ausgabeergebnisse wie folgt:
Es folgt eine zwei Daten senden an den Server der GET-Methode über ein HTML-Formular verwenden, eingereicht denselben Server-Skript test.cgi Dokument ist test Code wie folgt:
<!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>
Browser Umsetzung der Ergebnisse ist wie folgt:
Mit Hilfe der POST-Methode übergeben Daten an den Server sicherer und zuverlässiger, da einige sensible Daten wie Benutzerkennwörter POST verwenden müssen, ist es, Daten zu übertragen.
Auch die folgende test.cgi, kann es auch durch den Browser übermittelt POST Formulardaten verarbeiten:
#!/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/%(de)/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;
Es folgt eine zwei Daten senden an den Server der GET-Methode über ein HTML-Formular verwenden, eingereicht denselben Server-Skript test.cgi Dokument ist test Code wie folgt:
<!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>
Browser Umsetzung der Ergebnisse ist wie folgt:
Checkbox, die eine oder mehrere Optionsdaten vorzulegen, ist test Code wie folgt:
<!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>
Ein Code test.cgi Datei:
#!/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/%(de)/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;
Browser Umsetzung der Ergebnisse ist wie folgt:
Nur Radio übertragen Daten an einen Server, test Code ist wie folgt:
<!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>
test.cgi Script-Code ist wie folgt:
#!/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/%(de)/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;
Browser Umsetzung der Ergebnisse ist wie folgt:
TextArea- Pass mehrere Reihen von Daten an den Server ist test Code wie folgt:
<!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"> 在这里输入内容de. </textarea> <input type="submit" value="提交" /> </form> </body> </html>
test.cgi Script-Code ist wie folgt:
#!/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/%(de)/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;
Browser Umsetzung der Ergebnisse ist wie folgt:
HTML Dropdown-Feld Code wie folgt:
<!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 Script-Code wie folgt:
#!/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/%(de)/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;
Browser Umsetzung der Ergebnisse ist wie folgt:
Http-Protokoll in einem großen Nachteil ist falsch die Identität eines Benutzers zu beurteilen, die Programmierer viel Unannehmlichkeiten geben, scheint aber die Cookie-Funktion für diesen Mangel besteht.
Cookie, das das Skript, während der Kunde durch den Browser des Kunden auf dem Client-Festplatte zugreift, um Datensätze zu schreiben, Daten abrufen, wenn ein Kunde das nächste Skript besucht, um die Funktion der Bestimmung der Identität zu erreichen, Cookie bei der Überprüfung der Identität verwendet.
Http-Cookie wird durch den HTTP-Header gesendet zu erreichen, hatte er die Übertragung von Dateien, Header-Set-Cookie-Syntax lautet wie folgt:
Set-cookie:name=name;expires=date;path=path;domain=domain;secure
Cookie-Einstellungen ist sehr einfach, Cookie wird separat unter http-Header gesendet. Im folgenden Beispiel wird die Benutzer-ID, Passwort und endet in einem 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"; dedededede.其他 HTML 内容
Cookie-Information-Retrieval-Seite ist sehr einfach, in der CGI-Umgebungsvariablen HTTP_COOKIE, das Speicherformat ist wie folgt Cookie-Informationen gespeichert sind:
#!/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";
Das obige Beispiel Ausgabe lautet:
User ID = XYZ Password = XYZ123
Perl-CGI viele Einbaumodul liefert, verwendet die beiden folgenden: