Semplici domande su apache e cgi

-2

Sto solo imparando a usare cgi nei file html. Ho letto un sacco di cose sul web, ma la maggior parte riguarda gli alberi e non abbastanza la foresta. Sono uno studente discendente e ho difficoltà a capire cosa sta succedendo con cgi, apache e html. Al momento sto usando python come linguaggio di scripting cgi, ma se mi piacerebbe rispondere usando perl, posso gestirlo. Ecco un MWE per un test fallito.

HTML: (il file è getname.html)

<html>
<head></head>
<body>
<form method="POST" action="./test.py">
  <p>Your First Name: <input type="text" name="firstname">
  <p>Click here to submit form: <input type="submit" value="Submit">
  <input type="hidden" name="session" value="1f9a2">
</form>
</body>
</html>  

Python: (il file è test.py)

#!/usr/bin/python
import sys, os, os.path, shutil, string, fileinput
import cgi, cgitb

print "Content-type: text/html\n"
form = cgi.FieldStorage()
f = open('./testOutput', 'w')
if form.has_key("firstname"):
    f.write(form["firstname"])
else:
    f.write("Failure")
f.close()

Quindi, sembra come quello che sta succedendo è che le informazioni che l'utente inserisce nel modulo sono messe in una variabile chiamata 'firstname' (in realtà è una coppia chiave-valore messa in un hash come cosa nel linguaggio di scripting.In python è un dizionario). Questa variabile viene quindi inviata come input allo script cgi (test.py) e lo script viene eseguito.

Ma non è quello che sta succedendo. Quando premo il pulsante "Invia" nel file html, lo script test.py viene visualizzato nel browser e lo script non viene eseguito. A proposito, il motivo per cui ho scritto lo script su un file è che posso vedere se viene eseguito. Quando eseguo test.py dalla riga di comando, funziona perfettamente.

Il fatto che test.py sia visualizzato nel mio browser indica, penso, che apache non è in esecuzione o non è configurato correttamente o presenta problemi di autorizzazione. Per quanto posso vedere, nessuna di queste cose è vera, ma potrei sbagliarmi. Quindi ecco le mie domande:    1) perché l'apache è coinvolto? È necessario inviare le variabili raccolte nel modulo html allo script? Se è così, perché? So che html è solo un linguaggio di markup, ma ho pensato che il tag 'form' avesse la possibilità di inviare una variabile a uno script ed eseguire lo script.    2) C'è un modo per testare una configurazione di Apache? È possibile che apache utilizzi 127.0.0.1 come 'ServerName' (cioè ServerName 127.0.0.1:80 nel mio file httpd.conf)

Fondamentalmente, voglio solo scrivere script cgi per alcune pagine web che sto codificando a mano e testarle sul mio laptop di casa. Non sembro sapere come farlo e potrei usare un po 'di aiuto. TIA.

    
posta bev 29.02.2012 - 02:20
fonte

2 risposte

3

"1) perché è coinvolto l'apache? È necessario inviare le variabili raccolte nel modulo html allo script? Se sì, perché? So che l'html è solo un linguaggio di markup, ma ho pensato 'tag ha la capacità di inviare una variabile a uno script ed eseguire lo script "

CGI è una forma di scripting lato server, uno script CGI viene eseguito sul server Web e non sul client Web. C'è anche lo scripting lato client. In questi giorni che di solito assume la forma di Javascript incorporato nei tag di script nei documenti HTML. Questo non è correlato a CGI.

Alla radice, il tuo browser Web ha solo due lavori: richiedere i dati da altri computer tramite un protocollo di rete chiamato HTTP e rendere i dati che tornano in modo bello sullo schermo. L'unica cosa che il tuo browser conosce del tuo modulo web è che quando premi il pulsante di invio, dovrebbe inviare una richiesta ad un indirizzo Internet con il nome dello script e i dati del modulo. Il browser non sa nulla di Python, o dove nel file system risiede il documento 'test.py'. Non sa nemmeno che 'test.py' è uno script.

Un altro software deve essere in esecuzione per ricevere le richieste del browser, cercare i dati richiesti e inviarlo nuovamente al browser. L'altro pezzo di software è il server web, in questo caso Apache. Apache deve essere configurato in modo che quando riceve la richiesta per 'test.py' dal browser, sappia dove si trova test.py nel file system, quando vede una richiesta di un file che termina con ".py" non dovrebbe semplicemente trasmettere il contenuto del file al browser, ma piuttosto dovrebbe iniziare una copia dell'interprete python usando quello script, passargli i dati del modulo che sono venuti con la richiesta, e quindi inviare l'output dello script torna al browser.

Un problema che potrebbe rendere questo più confuso per te: ho semplificato se ho detto che il tuo browser ha solo due lavori. Per praticità, la maggior parte dei browser può anche funzionare come visualizzatori di file locali, ovvero, è possibile eseguire un "Apri file" su un file locale e il browser lo renderà, senza averlo richiesto da un server web. Il browser non saprà nulla sull'esecuzione di script a meno che non siano incorporati in un tag script come parte di un documento HTML.

    
risposta data 29.02.2012 - 03:35
fonte
1

Devi dire ad apache che i file che terminano con ".py" sono script e non solo file di testo.

Per fare questo è necessario modificare il file "httpd.conf", la linea in questione sembra simile a:

AddHandler cgi-script .cgi .pl .asp

Devi aggiungere l'estensione python ".py" a questa riga:

AddHandler cgi-script .cgi .pl .asp .py

Potrebbero esserci altre cose a seconda di quale distribuzione di Apache hai installato i dettagli completi qui: - Come

Se hai intenzione di svilupparlo ulteriormente ti consiglio di installare "mod_python" di apache che eseguirà gli script all'interno di apache e manterrà un interprete python pronto e in attesa di nuove richieste, piuttosto che avviare uno script python in un processo separato per ogni richiesta.

    
risposta data 29.02.2012 - 02:47
fonte

Leggi altre domande sui tag