Dacă proiectați formulare, mai devreme sau mai târziu, va trebui să creați o aplicație din partea serverului pentru a le prelucra. Nu vă panicați. Nu este nimic magic despre programare din partea serverului și nu este prea dificil. Cu o anumită perseverență și după puțină practică, veți ștampila cererile de procesare.
Cel mai important sfat pe care îl putem da despre programarea formularelor este ușor de reținut - copiați munca altora. Este foarte dificil să scrieți o aplicație de procesare a aplicațiilor de la zero. Copiați aplicația care rulează și modifica pentru nevoile formei sale - mult legche.K Din fericire, vânzătorii de server știu acest lucru și, de obicei, livreze probele prelucrate prin formularul de cerere, împreună cu serverul. Rummage un pic în directorul cgi-src, și veți găsi o serie de exemple utile pe care le puteți copia și aplica.
Nici măcar nu trebuie să vă așteptați să reproduceți tot ce este util care vine cu serverul dvs. și nu putem oferi un ghid complet pentru formarea programării. Tot ce putem face este să oferim exemple simple de aplicații GET și POST, permițându-vă să simțiți natura acestei lucrări și poate să vă împingem în direcția corectă.
Înainte de a începe, rețineți că nu toate serverele numesc aceste aplicații în același mod.
Exemplele noastre acoperă o clasă largă de servere care au avut loc de original HTTP-server înființat în centrul NCSA (Centrul National pentru aplicatii de procesare rapida, Centrul National pentru aplicatii de procesare rapida). De asemenea, trebuie să lucreze cu serverul foarte popular și ușor accesibil Apache. În toate cazurile, consultați documentația serverului pentru clarificare. Informații detaliate pot fi găsite în cărțile: «programare CGI cu Perl» Scott Gulich (Scott Guelich), Shishir Gundavarama (Shishir Gundavaram) și Günter Birzneksa (Gunther Birznieks), «Webmaster într-o coaja de nuca» 2 Stephen Speynauera (Stephen Spainhour) și Robert Eckstein (Robert Eckstein), emis de editura "O'Reilly".
O alternativă la modelul CGI-programare este un Java-servletov3 descris în cartea «Java Servlet programare» 4, de la pen-ul lui Jason Hunter (Jason Hunter) și William Crawford (William Crawford) (O'Reilly). Servlets pot fi folosite pentru a procesa atât formularele GET, cât și POST, deși sunt dedicate problemelor mai generale. Nu există exemple de servlet în această carte.
Returnează rezultatele
Înainte de a începe, trebuie să discutăm cum se termină aplicația pe partea de server.
Toate aplicațiile de la server transferă rezultatele lor pe server (și apoi la utilizator), adăugându-le la ieșirea standard a aplicației ca fișier în codificare MIME. Prin urmare, prima linie de ieșire trebuie să fie un descriptor de tip MIME pentru tipul de conținut. Dacă aplicația dvs. returnează un document HTML, primul rând este:
A doua linie trebuie să fie complet goală. Aplicația dvs. poate returna conținut de alt tip - specificați tipul MIME corect. Imaginile GIF, de exemplu, sunt precedate de:
Textul real, care nu ar trebui interpretat ca HTML, poate fi returnat ca:
Acest lucru este adesea util atunci când trebuie să reveniți la ieșirea altor comenzi care generează text simplu în loc de HTML.
Când serverul www.kumquat.com procesează această adresă URL, el apelează o aplicație numită dump-get stocată în directorul cgi-bin.
Tot ce merge după semnul întrebării este transmisă aplicației ca parametri.
În plus, situația poate fi diferită în funcție de natura tipului de adresă URL GET. În timp ce formularele sunt plasate în URL-ul perechii nume / valoare, puteți apela aplicațiile GET cu o adresă URL care conține numai valorile. În acest fel:
acesta este, de asemenea, un apel valabil cu parametri separați printr-un semn plus (+). Un astfel de apel apare de obicei atunci când o aplicație leagă un document de căutare cu o etichetă într-o aplicație. Parametrii tipariți de utilizator în câmpul de intrare sunt transmiși aplicației din partea serverului ca parametri fără nume separați printr-un semn plus.
Dacă apelați o aplicație GET cu parametri numiți, serverul va transmite acești parametri în aplicație într-un fel. Parametrii fără nume sunt diferiți.
Utilizarea parametrilor numiți cu aplicațiile GET
Parametrii numiți sunt transmiși către aplicațiile GET prin crearea variabilei de mediu QUERY_STRING și atribuirea acesteia ca valoare pentru întreaga porțiune a adresei URL care urmează semnul întrebării. Dacă luăm exemplul nostru anterior, valoarea QUERY_STRING va fi:
Aplicația dvs. ar trebui să obțină această variabilă și să selecteze perechile nume / valoare din ea. Din fericire, majoritatea serverelor vin cu un număr de programe standard care efectuează această lucrare, astfel încât un simplu program C care imprimă pur și simplu parametrii ar putea arăta astfel:
#include#include
#define MAX_ENTRIES 10000
tippedef struct char * val;
> intrare;
char * makeword (char * line, oprire caractere);
char x2c (char * ce);
void unescape_url (char * url);
void plustospace (char * str);
principală (int argc, char * argv [])
char * query_string;
/ * Obțineți valoarea variabilei de mediu QUERY_STRING * /
query_string = getenv ("QUERY_STRING");
/ * Extract parametri, construi tabelul de apariții * /
pentru (num_entries = 0; query_string [0]; num_entries ++) intrări [num_entries] .val = makeword (query_string, '');
plustospace (intrări [num_entries] .val);
unescape_url (intrări [num_entries] .val);
intrări [num_entries] .name =
makeword (intrări [num_entries] .val, '=');
>
/ * Dați "pește" HTML * /
printf ("Tip de conținut: text / html \ n");
printf ("\ n");
printf ();
printf ();
printf ("Parametri numiți \ n");
printf ("");
printf ();
printf ("Ați introdus următorii parametri: \ n");
printf ("
-
\ n "); / * Ieșirea parametrilor primiți de la utilizator * /
pentru (i = 0; i \ n ");
printf ("\ n");
>
În aplicațiile reale, trebuie să inserați coduri valide de procesare a parametrilor după selecția lor și înainte de a genera cod HTML.
Desigur, trebuie să modificați textul HTML redactat în funcție de funcția aplicației.
Utilizarea parametrilor fără nume cu aplicațiile GET
Parametrii sunt transmiși aplicației ca parametri ai liniei de comandă. Acest lucru face dezvoltarea aplicațiilor pe partea de server aproape trivială. Aici este o secvență simplă de comenzi care imprimă valorile parametrilor:
#
# Rezultatul parametrilor anonime definite de utilizator de tip GET
ecou "Tip de conținut: text / html"
ecou
echo "
echo "
ecou "Rezultatul parametrilor nesemnați"
echo "
echo "
echo 'Ați setat următorii parametri:'
echo "
-
'
- '$ i
endecho "
foreach i ($ *)
echo "
echo "
ieșire 0
Din nou, respectăm aceeași regulă generală: emise un antet de document exemplu care include un tip de conținut MIME, urmat de parametrii și finalizarea standard. Pentru a converti aceasta într-o aplicație reală, înlocuiți bucla foreach cu comenzi care într-adevăr fac ceva.
#include#include
#define MAX_ENTRIES 10000
tippedef struct char * val;
> intrare;
char * makeword (char * line, oprire caractere);
char * fmakeword (FILE * f, oprire caractere, int * len);
char x2c (char * ce);
void unescape_url (char * url);
void plustospace (char * str);
principală (int argc, char * argv [])
/ * Extrageți parametrii de la stdin, construiți un tabel de apariții * /
pentru (num_entries = 0 ;! feof (stdin); num_entries ++) intrări [num_entries] .val = fmakeword (stdin, '' cl);
plustospace (intrări [num_entries] .val);
unescape_url (intrări [num_entries] .val);
intrări [num_entries] .name =
makeword (intrări [num_entries] .val, '=');
>
/ * Dați "pește" HTML * /
printf ("Tip de conținut: text / html \ n");
printf ("\ n");
printf ();
printf ();
printf ("Parametri numiți \ n");
printf (""); printf ();
printf ("Ați introdus următorii parametri: \ n");
printf ("
-
\ n ");
/ * Ieșirea parametrilor primiți de la utilizator * /
pentru (i = 0; i \ n ");
printf ("\ n");
>
Ca și alte exemple, acest program este destul de potrivit pentru verificarea parametrilor transmiși aplicației server în timp ce sunteți nou în aplicațiile de formulare și de depanare. De asemenea, poate fi folosit ca bază pentru alte aplicații prin introducerea codului de procesare corespunzător după construirea listei de parametri și schimbarea ieșirii programului pentru a trimite rezultatele către utilizator.