2010-07-09 22 views
11

Estoy buscando una biblioteca o llamada de función en python o una biblioteca asociada que me permita alimentar en una secuencia sin formato de datos de texto que representa un HTTP req/res y que escupiría que la información es algo tipo de forma significativa como un diccionario o lista. No quiero usar algunos integrados en la clase ni crear muchos objetos nuevos, en mi programa recibo algunos datos en bruto y es con lo que tengo que trabajar. ¿Ya hay una solución para esto o tengo que escribir un analizador HTTP yo mismo?Parse Raw HTTP en Python

Editar: Permítanme aclarar qué es exactamente lo que estoy buscando hacer. Estoy buscando algo que llevaría una cadena como:

GET /index.html HTTP/1.1 \r\n 
Host:www.stackoverflow.com \r\n 
User-Agent:Firefox \r\n 
etc. 

Y enviarme de vuelta algo que encapsula el método, la versión HTTP, encabezados y todo el resto.

+0

- aquí hay dos preguntas que creo que podrían abordar este problema (que he intentado abordar en detalle allí): http://stackoverflow.com/questions/2115410/does-python-have-a-module -for-parsing-http-requests-and-responses/ http://stackoverflow.com/questions/4685217/parse-raw-http-headers/ –

Respuesta

1

http://docs.python.org/library/httplib.html Creo que esta es la biblioteca que está buscando. Un pequeño cambio en el nombre de Python 3, pero por lo demás es bueno ir.

+2

Lo miré pero no pude encontrar lo que necesitaba. Corrígeme si estoy equivocado, pero ¿esa publicación no gira en torno a las solicitudes de realización/recepción? No quiero hacer/recibir ninguna solicitud, solo quiero ver los datos sin procesar. ¿Podría dar un ejemplo del método que cree que haría esto? – themaestro

+1

Bueno, la solicitud http, cuando la reciba contiene los datos del encabezado sin procesar, y usa esta biblioteca para crear un diccionario de encabezado. Esto es lo que describe tu publicación. Si está buscando recibir datos de texto en bruto sobre un socket, puede probar con http://docs.python.org/library/socket.html pero va a recrear muchas partes de la rueda. Por el contrario, si está recibiendo el texto sin formato y quiere una forma de analizarlo en un encabezado de solicitud válido, puede probar http://deron.meranda.us/python/httpheader/pydoc#-parse_token_or_quoted_string pero no lo he intentado yo mismo. – Gabriel

1

Empezaría mirando WebOb. Creo que el módulo cgi en la biblioteca estándar también tiene un analizador HTTP.

+0

Sweet, webob.Request.accept maneja esto perfectamente: http://pythonpaste.org/webob/reference.html#accept-headers – aehlke

+0

@Wahnfrieden - Sin embargo, estoy confundido acerca de cómo obtener una solicitud HTTP sin procesar dentro de una cadena, como se muestra en la pregunta, y convertirlo en un objeto WebOb. No veo nada en su enlace que sugiera que es posible. ¿Podría compartir cómo convierte cadenas de solicitud HTTP en objetos WebOb? (Porque lo necesito en uno de mis proyectos!) :) –

+0

@Brandon lo siento, comenté prematuramente: WebOb analiza la parte del encabezado que necesitaba (solo el valor del encabezado Accept), pero no sé sobre el resto. – aehlke

3

Hay un analizador sintáctico de python puro que se envía como una implementación alternativa para la implementación optimizada de C/Cython del proyecto http-parser.

Aquí está la versión de Python puro:

Aquí la fuente de la versión C y la envoltura Cython: