http-parser er et HTTP-anmodning / svar parser for Python i C under MIT License, baseret på http-parser fra Ryan Dahl.
Installation:
pip installere http-parser
Eller installere fra kilde:
git klon git: //github.com/benoitc/http-parser.git
cd http-parser && python setup.py installere
Anvendelse:
http-parser giver dig parser.HttpParser lavt niveau parser i C, som du kan få adgang til i din python program og http.HttpStream give adgang overordnet til et læsbart, sekventiel io.RawIOBase objekt.
For at hjælpe dig i dit daglige arbejde, http-parser prvides dig 3 slags læsere i læseren modul: IterReader at læse iterables, at StringReader læser strenge og StringIO objekter, SocketReader læse stikkontakter eller genstande med samme a & icirc; (Recv_into nødvendigt). Du cnan selvfølgelig bruge nogen io.RawIOBase objekt.
Likre http-parser i C du kan videregive dine egne tilbagekald til C parser, så du i sidste ende kan parse asynkront enhver HTTP stream. Noteringer er:
on_message_begin ()
on_path (sti)
on_query_string (QUERY_STRING)
on_url (URL)
on_fragment (fragment)
on_header_field (felt, last_was_value)
on_header_value (nøgle, værdi)
on_headers_complete ()
on_body (luns)
on_message_complete ()
Eksempel HttpStream
ex:
#! / Usr / bin / env python
import socket
fra http_parser.http import HttpStream
fra http_parser.reader import SocketReader
def main ():
& Nbsp; s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
& Nbsp; prøv:
& Nbsp; s.connect ((»gunicorn.org«, 80))
& Nbsp; s.send ("GET / HTTP / 1.1 r nHost: gunicorn.org r n r n")
& Nbsp; r = SocketReader (er)
& Nbsp; p = HttpStream (r)
& nbsp; print p.headers ()
& Nbsp;. Print p.body_file () læs ()
& Nbsp; endelig:
& Nbsp; s.close ()
hvis __name__ == "__main__":
& Nbsp; main ()
Eksempel på HttpParser:
#! / Usr / bin / env python
import socket
fra http_parser.parser import HttpParser
def main ():
& Nbsp; p = HttpParser ()
& Nbsp; s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
& Nbsp; krop = []
& Nbsp; prøv:
& Nbsp; s.connect ((»gunicorn.org«, 80))
& Nbsp; s.send ("GET / HTTP / 1.1 r nHost: gunicorn.org r n r n")
& Nbsp; mens Sand:
& nbsp; data = s.recv (1024)
& Nbsp; hvis ikke data:
& Nbsp; break
& Nbsp; recved = len (data)
& Nbsp; nparsed = p.execute (data, recved)
& Nbsp; hævde nparsed == recved
& Nbsp; hvis p.is_headers_complete ():
& nbsp; print p.get_headers ()
& Nbsp; hvis p.is_partial_body ():
& Nbsp; body.append (p.recv_body ())
& Nbsp; hvis p.is_message_complete ():
& Nbsp; break
& Nbsp; print "" .join (kroppen)
& Nbsp; endelig:
& Nbsp; s.close ()
hvis __name__ == "__main__":
& Nbsp; main ()
. Du kan finde flere docs i koden (eller brug en doc genererator)
Krav :
- Python
- Cython hvis du har brug for at genopbygge C-kode
Kommentarer ikke fundet