http-parser είναι ένα HTTP αναλυτή ερώτησης / απάντησης για την Python σε C υπό άδεια χρήσης του MIT, που βασίζεται στο http-αναλυτή από Ryan Dahl.
Εγκατάσταση:
Pip εγκαταστήσετε http-parser
Ή να εγκαταστήσετε από την πηγή:
git κλώνος git: //github.com/benoitc/http-parser.git
CD http-parser && python setup.py εγκαταστήσετε
Χρήση:
http-parser που παρέχουν parser.HttpParser χαμηλού επιπέδου αναλυτή σε C που μπορείτε να έχετε πρόσβαση στο πρόγραμμα python σας και http.HttpStream παρέχοντας πρόσβαση υψηλότερου επιπέδου σε μια αναγνώσιμη, διαδοχική αντικείμενο io.RawIOBase.
Για να σας βοηθήσουμε στην καθημερινή εργασία σας, http-parser που prvides 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
ex:
#! / Usr / bin / env python
υποδοχή εισαγωγής
από την εισαγωγή http_parser.http HttpStream
από http_parser.reader SocketReader εισαγωγής
def main ():
& 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 r n r n")
& 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 python
υποδοχή εισαγωγής
από την εισαγωγή http_parser.parser HttpParser
def main ():
& 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 r n r n")
& Nbsp? Ενώ True:
& Nbsp? Δεδομένων = s.recv (1024)
& Nbsp? Αν όχι δεδομένα:
& Nbsp? Διάλειμμα
& Nbsp? Recved = len (δεδομένα)
& 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 ()
. Μπορείτε να βρείτε περισσότερες docs στον κώδικα (ή χρησιμοποιήστε ένα genererator doc)
Απαιτήσεις :
- Python
- Cython αν χρειαστεί να ξαναχτίσουν τον κωδικό C
Τα σχόλια δεν βρέθηκε