2010-04-20 17 views
14

Escribo un servicio web muy simple, escrito en Python y ejecuto como CGI en un servidor Apache.Leyendo el encabezado de un cliente de la secuencia de comandos CGI de Python?

De acuerdo con los documentos de Python (en algún lugar ... Olvidé dónde), puedo usar sys.stdin para leer los datos PUBLICADOS por un cliente aleatorio, y esto ha funcionado bien. Sin embargo, me gustaría poder leer también la información del encabezado HTTP: IP entrante, agente de usuario, etc. También me gustaría mantenerlo muy simple por ahora, usando solo bibliotecas de Python (entonces no mod-python). ¿Cómo hago esto?

Respuesta

13

Si ejecuta como CGI, no se puede leer el encabezado HTTP directamente, pero el servidor web puesto gran parte de esa información en variables de entorno para ti. Puede simplemente seleccionarlo de os.environ []

La lista de variables de entorno que pueden existir es bastante larga. Puede encontrarlo haciendo una búsqueda web de "interfaz de puerta de enlace común". Por ejemplo, en http://www.ietf.org/rfc/rfc3875.txt se llaman "metavariables".

+0

¡Gracias! Eso era exactamente lo que necesitaba. – jbreed

4

Como this page explica, la mayoría de los encabezados de solicitud HTTP están disponibles para su secuencia de comandos CGI a través de variables de entorno. Ejecute cgi.test() en lugar de su secuencia de comandos para ver el entorno (incluidos los encabezados de solicitud HTTP) que se muestra de nuevo a su navegador de visita.

8

estos se dan a la secuencia de comandos CGI a través del entorno:

import os 
user_agent = os.environ["HTTP_USER_AGENT"] 
ip = os.environ["REMOTE_ADDR"] 
Cuestiones relacionadas