Dalla riga comandi del browser (riga location)
Per esempio, se in questa riga si immettesse
http://.../cgidev2/hello1.pgm?firstname=George&lastname=Brown
si spedirebbe ancora la stessa stringa al programma
hello1.
2. I metodi GET e POST
Due sono le modalità di spedizione di una stringa di input
ad un programma CGI.
- Tramite il metodo GET.
Ciò si realizza implicitamente quando la spedizione
avviente tramite una tag anchor
(<a> href=...</a>)
oppure attraverso la linea comandi del browser.
Il metodo GET può anche essere utilizzato
in un
form.
Ciò generalmente si fa a fini di test.
Infatti, quando si utilizza il metodo GET
la stringa di input è sempre visualizzata
nella riga comandi del browser.
- Con il metodo POST.
Questo è quanto comunemente si fa in un
form.
Infatti, quando si utilizza il metodo POST
la stringa di input non viene mai visualizzata
all'utente finale.
Usare un metodo o l'altro ha implicazioni diverse
sul reperimento della stringa da parte del CGI.
Tuttavia, uno dei tanti meriti del service program
di Mel Rothman, è proprio quello di rendere
la scrittura del CGI indipendente dal metodo (GET o POST)
utilizzato dal browser.
Le procedure di "lettura" della stringa,
qui di seguito esposte, provvedono da sole a
determinare in quale modo la stringa sia stata inviata
e quindi a reperirla nel modo appropriato.
Ribadiamo quindi che i programmi CGI sviluppati con il
metodo Rothman non sono sensibili
al metodo (GET o POST) utilizzato dal browser
per l'invio della stringa.
Se vuoi, puoi richiamare un Programma dimostrativo sui metodi GET e POST.
Questo programma ti consente di scegliere tra il metodo GET ed il metodo POST, in modo tale che tu possa vedere
la differenza dell'URL.
Inoltre questo programma ti insegna come costruire dinamicamente nel tuo CGI un link da emettere
nella pagina WEB di output.
3. Procedura per leggere la stringa di input
Per acquisire il buffer di input spedito dal browser del client, il programma CGI deve utilizzare la sottoprocedura
zhbGetInput.
zhbGetInput
usa l'API QzhbCgiParse per reperire l'input dal browser
e per sistemarlo in un insieme di schiere interne
ed allocate dinamicamente.
Queste schiere saranno poi usate con ottime prestazioni
dalle procedure di parsing
ZhbGetVarCnt,
ZhbGetVar e
ZhbGetVarUpper.
Attenzione.
Per poter funzionare correttamente, l'API QzhbCgiParse
necessita che la variabile d'ambiente (environment variable) CGIConvMode contenga il valore
%%EBCDIC/EBCDIC%% (non il valore %%MIXED/MIXED%%). In caso negativo, ZhbGetInput
scriverebbe un messaggio di errore nel file di debug
CGIDEBUG e consentirebbe al programma di continuare
fintantochè fallisce.
Per poter usare ZhbGetInput correttamente, e necessario aggiungere la seguente direttiva alle direttive
della istanza HTTP:
|
CGIConvMode %%EBCDIC/EBCDIC%% |
L'esempio seguente ilustra come usare ZhbGetInput in un programma CGI:
* Definizione dei prototipi e della DS standard per i codici errore delle API
/copy CGIDEV2/qrpglesrc,prototypeb
/copy CGIDEV2/qrpglesrc,usec
* Numero di variabili di input ricevute
DnbrVars s 10i 0
*
* Query string ricevuta
Dsavedquerystring...
D s 32767 varying
*
... etc. ...
* Acquisisci il buffer di input spedito dal browser del client
C eval nbrVars =
C zhbGetInput(savedquerystring:qusec)
|
In alternativa si può utilizzare il codice seguente:
* Definizione dei prototipi e della DS standard per i codici errore delle API
/copy CGIDEV2/qrpglesrc,prototypeb
/copy CGIDEV2/qrpglesrc,usec
* Variabili predefinite
/copy CGIDEV2/qrpglesrc,variables3
... etc. ...
* Acquisisci il buffer di input spedito dal browser del client
/copy CGIDEV2/qrpglesrc,prolog3
|
Dopo aver eseguito la procedura ZhbGetInput il programma può iniziare a ricevere le variabili in input
alla transazione CGI utilizzando la procedura ZhbGetVar.
Nota importante su ZhbGetInput.
Quando si usa il metodo POST, la procedura ZhbGetInput può essere usata una volta solo nel programma.
Se la si usa una seconda volta, le variabili di input non possono più essere ricevute. Ad esempio:
se si usa il metodo POST, la transazione è elaborata da un programma composto da due moduli/programmi A e B,
dove A e B lanciano entrambi la procedure ZhbGetInput, A non ha problemi nel ricevere le variabili di input,
mentre B - dopo aver emesso la ZhbGetInput - riceverà valori in bianco per tutte le variabili.
Se tuttavia si rimuove la ZhbGetinput di B, anche B riceve le variabili.
Questo problema deriva dalla API QzhbCgiParse dell'IBM System i, vedi
questa pagina IBM.
Come esempio pratico, si veda il sorgente del programma
template3.