http-ontleder is 'n HTTP-versoek / reaksie parser vir Python in C onder MIT lisensie, gebaseer op http-ontleder van Ryan Dahl.
Installasie:
PIP installeer http-ontleder
Of installeer van die bron:
git kloon git: //github.com/benoitc/http-parser.git
cd http-parser && luislang setup.py installeer
Gebruik:
http-ontleder bied jou parser.HttpParser lae-vlak parser in C wat jy kan toegang in jou luislang program en http.HttpStream wat hoër-vlak van toegang tot 'n leesbare, sekwensiële io.RawIOBase voorwerp.
Om jou te help in jou dag werk, http-parser prvides jy 3 soort lesers in die leser module: IterReader iterables te lees, StringReader snare en StringIO voorwerpe te lees, SocketReader voetstukke of voorwerpe met dieselfde a & icirc te lees; (Recv_into nodig). Jy cnan natuurlik die gebruik van enige io.RawIOBase voorwerp.
Likre http-ontleder in C kan jy jou eie verifikasie slaag om die C ontleder, sodat jy kan uiteindelik asynchroon ontleed enige HTTP stroom. Verifikasie is:
on_message_begin ()
on_path (pad)
on_query_string (QUERY_STRING)
on_url (url)
on_fragment (fragment)
on_header_field (veld, last_was_value)
on_header_value (sleutel, waarde)
on_headers_complete ()
on_body (stuk)
on_message_complete ()
Voorbeeld van HttpStream
ex:
#! / Usr / bin / env luislang
invoer socket
van http_parser.http invoer HttpStream
van http_parser.reader invoer SocketReader
def main ():
& Nbsp; s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
& Nbsp; probeer:
& Nbsp; s.connect (('gunicorn.org', 80))
& Nbsp; s.send ("AOO / HTTP / 1.1 r nHost: gunicorn.org r n r n")
& Nbsp; r = SocketReader (s)
& Nbsp; p = HttpStream (r)
& Nbsp; druk p.headers ()
& Nbsp;. Druk p.body_file () gelees ()
& Nbsp; uiteindelik:
& Nbsp; s.close ()
As __name__ == "__main__":
& Nbsp; main ()
Voorbeeld van HttpParser:
#! / Usr / bin / env luislang
invoer socket
van http_parser.parser invoer HttpParser
def main ():
& Nbsp; p = HttpParser ()
& Nbsp; s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
& Nbsp; liggaam = []
& Nbsp; probeer:
& Nbsp; s.connect (('gunicorn.org', 80))
& Nbsp; s.send ("AOO / HTTP / 1.1 r nHost: gunicorn.org r n r n")
& Nbsp; terwyl Ware:
& Nbsp; data = s.recv (1024)
& Nbsp; indien nie data:
& Nbsp; break
& Nbsp; recved = Len (data)
& Nbsp; nparsed = p.execute (data, recved)
& Nbsp; beweer nparsed == recved
& Nbsp; as p.is_headers_complete ():
& Nbsp; druk p.get_headers ()
& Nbsp; as p.is_partial_body ():
& Nbsp; body.append (p.recv_body ())
& Nbsp; as p.is_message_complete ():
& Nbsp; break
& Nbsp; "" Druk .join (liggaam)
& Nbsp; uiteindelik:
& Nbsp; s.close ()
As __name__ == "__main__":
& Nbsp; main ()
. Jy kan meer docs vind in die kode (of gebruik 'n doc genererator)
Vereistes :
- Python
- Cython as jy nodig het om die C-kode te herbou
Kommentaar nie gevind