http-מנתח הוא מנתח HTTP בקשה / תגובה לפייתון בC תחת רישיון MIT, המבוסס על http-מנתח מריאן דאל.
התקנה:
PIP להתקין http-מנתח
או להתקין ממקור:
git clone git: //github.com/benoitc/http-parser.git
cd http-מנתח && פיתון setup.py להתקין
שימוש:
http-מנתח לספק לך מנתח ברמה הנמוכה parser.HttpParser בC שאתה יכול לגשת בתכנית פיתון וhttp.HttpStream מתן גישה ברמה גבוהה יותר לאובייקט קריא, רציף io.RawIOBase.
כדי לעזור לך בעבודת היום שלך, prvides http-מנתחך 3 סוג של קוראים במודול הקורא: IterReader לקרוא iterables, StringReader לקורא מחרוזות וחפצי StringIO, SocketReader לקרוא שקעים או אובייקטים עם אותו וicirc; (נדרש recv_into). אתה cnan כמובן להשתמש בכל אובייקט io.RawIOBase.
Likre http-מנתח בC אתה יכול להעביר התקשרויות חזרה שלך למנתח C, כך סופו של דבר אתה יכול לנתח באופן אסינכרוני כל זרם HTTP. התקשרויות חזרה הן:
(On_message_begin)
on_path (נתיב)
on_query_string (QUERY_STRING)
on_url (url)
on_fragment (בר)
on_header_field (שדה, last_was_value)
on_header_value (מפתח, ערך)
on_headers_complete ()
on_body (נתח)
on_message_complete ()
דוגמא לHttpStream
לשעבר:
#! / Usr / bin / פיתון env
שקע יבוא
מיבוא http_parser.http HttpStream
מSocketReader יבוא http_parser.reader
def ראשי ():
& Nbsp; s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
& Nbsp; לנסות:
& Nbsp; s.connect (('gunicorn.org', 80))
& Nbsp; s.send ("GET / HTTP / 1.1 r nHost: gunicorn.org n r n r ")
& Nbsp; r = SocketReader (ים)
& Nbsp; p = HttpStream (r)
& Nbsp; p.headers הדפסה ()
& Nbsp;. P.body_file הדפסה () לקרוא ()
& Nbsp; לבסוף:
& Nbsp; s.close ()
אם __name__ == "__main__":
& Nbsp; main ()
דוגמא לHttpParser:
#! / Usr / bin / פיתון env
שקע יבוא
מיבוא http_parser.parser HttpParser
def ראשי ():
& Nbsp; p = HttpParser ()
& Nbsp; s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
& Nbsp; גוף = []
& Nbsp; לנסות:
& Nbsp; s.connect (('gunicorn.org', 80))
& Nbsp; s.send ("GET / HTTP / 1.1 r nHost: gunicorn.org n r n r ")
& Nbsp; ואילו אמיתי:
& Nbsp; נתונים = s.recv (1024)
& Nbsp; אם לא נתונים:
& Nbsp; הפסקה
& Nbsp; = len recved (נתונים)
& Nbsp; nparsed = p.execute (נתונים, recved)
& Nbsp; טוען == nparsed recved
& Nbsp; אם p.is_headers_complete ():
& Nbsp; p.get_headers הדפסה ()
& Nbsp; אם p.is_partial_body ():
& Nbsp; body.append (p.recv_body ())
& Nbsp; אם p.is_message_complete ():
& Nbsp; הפסקה
& Nbsp; הדפסה "" .join (גוף)
& Nbsp; לבסוף:
& Nbsp; s.close ()
אם __name__ == "__main__":
& Nbsp; main ()
. אתה יכול למצוא עוד מסמכים בקוד (או להשתמש genererator doc)
דרישות :
- Python
- Cython אם אתה צריך לבנות מחדש את קוד C
תגובות לא נמצא