2010-04-20 20 views
14

Sto scrivendo un servizio web molto semplice, scritto in Python ed eseguito come CGI su un server Apache.Leggere l'intestazione di un client dallo script CGI Python?

Secondo i documenti Python (da qualche parte ... ho dimenticato dove), posso usare sys.stdin per leggere i dati postati da un client casuale, e questo ha funzionato bene. Tuttavia, mi piacerebbe essere in grado di leggere anche le informazioni dell'intestazione HTTP: IP in entrata, agente utente e così via. Mi piacerebbe anche mantenerlo molto semplice per ora, usando solo le librerie Python (quindi non mod-python). Come faccio a fare questo?

risposta

13

Se si esegue come un CGI, non è possibile leggere l'header HTTP direttamente, ma il server web messo molto di tali informazioni in variabili d'ambiente per te. Si può semplicemente scegliere da os.environ []

L'elenco delle variabili di ambiente che potrebbero essere lì è piuttosto lungo. È possibile trovarlo eseguendo una ricerca Web per "interfaccia gateway comune". Ad esempio, in http://www.ietf.org/rfc/rfc3875.txt sono chiamati "meta-variabili".

+0

Grazie! Era esattamente ciò di cui avevo bisogno. – jbreed

4

Come spiega this page, la maggior parte delle intestazioni delle richieste HTTP sono rese disponibili per lo script CGI tramite variabili di ambiente. Esegui cgi.test() anziché il tuo script per vedere l'ambiente (incluse le intestazioni delle richieste HTTP) mostrato al tuo browser di visita.

8

questi sono dati allo script CGI attraverso l'ambiente:

import os 
user_agent = os.environ["HTTP_USER_AGENT"] 
ip = os.environ["REMOTE_ADDR"] 
Problemi correlati