2010-07-09 19 views
11

Sto cercando una chiamata di libreria o funzione in python o una libreria associata che mi consenta di inserire un flusso di dati di testo che rappresenta un req/res HTTP e che sputerebbe fuori che le informazioni sono alcune una sorta di forma significativa come un dizionario o una lista. Non voglio usare un po 'di classe o creare un sacco di nuovi oggetti, nel mio programma sto ricevendo in alcuni dati grezzi e questo è proprio quello con cui devo lavorare. C'è già una soluzione là fuori per questo, o devo scrivere un parser HTTP me stesso?Parse Raw HTTP in Python

Modifica: consentitemi di chiarire cosa esattamente cerco di fare. Sto cercando qualcosa che avrebbe preso una stringa del tipo:

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

E rimandarmi qualcosa di incapsulare il metodo, la versione HTTP, intestazioni e tutto il resto.

+0

- qui ci sono due domande che penso potrebbero risolvere questo problema (che ho cercato di descrivere in dettaglio): http://stackoverflow.com/questions/2115410/does-python-have-a-module -per-parsing-http-requests-and-responses/ http://stackoverflow.com/questions/4685217/parse-raw-http-headers/ –

risposta

1

http://docs.python.org/library/httplib.html Credo che questa sia la libreria che stai cercando. Un piccolo cambiamento di nome per Python 3, ma per il resto va bene.

+2

L'ho guardato ma non riuscivo a trovare ciò di cui avevo bisogno. Correggimi se sbaglio, ma quella lib non ruota attorno alle richieste di fare/ricevere effettivamente? Non voglio fare/ricevere richieste, voglio solo guardare i dati grezzi. Potresti dare un esempio del metodo che ritieni possa fare questo? – themaestro

+1

Bene la richiesta http, quando si riceve contiene i dati di intestazione non elaborati e si utilizza questa libreria per creare un dizionario di intestazione. Questo è ciò che descrive il tuo post. Se stai cercando di ricevere dati di testo non elaborati su un socket, puoi provare http://docs.python.org/library/socket.html ma creerai molte parti di ruote. Al contrario, se stai ricevendo il testo non elaborato e desideri un modo per analizzarlo in un'intestazione di richiesta valida, puoi provare http://deron.meranda.us/python/httpheader/pydoc#-parse_token_or_quot_string ma non l'ho provato io stesso. – Gabriel

1

Vorrei iniziare guardando WebOb. Penso che il modulo cgi nella libreria standard abbia anche un parser HTTP.

+0

Dolce, webob.Request.accept gestisce perfettamente: http://pythonpaste.org/webob/reference.html#accept-headers – aehlke

+0

@Wahnfrieden - Sono confuso, tuttavia, su come ottenere una richiesta HTTP non valida all'interno di un stringa, come è mostrato nella domanda, e trasformarlo in un oggetto WebOb. Non vedo nulla nel tuo link che suggerisca che sia possibile. Potresti condividere come trasformi le stringhe di richieste HTTP in oggetti WebOb? (Perché ho bisogno di uno dei miei progetti!:) :) –

+0

@Brandon scusate ho commentato prematuramente - WebOb analizza la parte dell'intestazione di cui avevo bisogno (solo il valore dell'intestazione Accept), ma non ne so il resto. – aehlke