Skip to main content

http request/response parser

Project description

http-parser

HTTP request/response parser for Python compatible with Python 2.x (>=2.6), Python 3 and Pypy. If possible a C parser based on http-parser from Ryan Dahl will be used.

http-parser is under the MIT license.

Project url: https://github.com/benoitc/http-parser/

Build Status

Requirements:

  • Python 2.6 or sup. Pypy latest version.

  • Cython if you need to rebuild the C code (Not needed for Pypy)

Installation

$ pip install http-parser

Or install from source:

$ git clone git://github.com/benoitc/http-parser.git
$ cd http-parser && python setup.py install

Note: if you get an error on MacOSX try to install with the following arguments:

$ env ARCHFLAGS=”-arch i386 -arch x86_64” python setup.py install

Usage

http-parser provide you parser.HttpParser low-level parser in C that you can access in your python program and http.HttpStream providing higher-level access to a readable,sequential io.RawIOBase object.

To help you in your day work, http-parser provides you 3 kind of readers in the reader module: IterReader to read iterables, StringReader to reads strings and StringIO objects, SocketReader to read sockets or objects with the same api (recv_into needed). You can of course use any io.RawIOBase object.

Example of HttpStream

ex:

#!/usr/bin/env python
import socket

from http_parser.http import HttpStream
from http_parser.reader import SocketReader

def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect(('gunicorn.org', 80))
        s.send("GET / HTTP/1.1\r\nHost: gunicorn.org\r\n\r\n")
        r = SocketReader(s)
        p = HttpStream(r)
        print p.headers()
        print p.body_file().read()
    finally:
        s.close()

if __name__ == "__main__":
    main()

Example of HttpParser:

#!/usr/bin/env python
import socket

# try to import C parser then fallback in pure python parser.
try:
    from http_parser.parser import HttpParser
except ImportError:
    from http_parser.pyparser import HttpParser


def main():

    p = HttpParser()
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    body = []
    try:
        s.connect(('gunicorn.org', 80))
        s.send("GET / HTTP/1.1\r\nHost: gunicorn.org\r\n\r\n")

        while True:
            data = s.recv(1024)
            if not data:
                break

            recved = len(data)
            nparsed = p.execute(data, recved)
            assert nparsed == recved

            if p.is_headers_complete():
                print p.get_headers()

            if p.is_partial_body():
                body.append(p.recv_body())

            if p.is_message_complete():
                break

        print "".join(body)

    finally:
        s.close()

if __name__ == "__main__":
    main()

You can find more docs in the code (or use a doc generator).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

toil-http-parser-0.8.8.tar.gz (98.9 kB view details)

Uploaded Source

Built Distribution

toil_http_parser-0.8.8-py3.7-linux-x86_64.egg (228.3 kB view details)

Uploaded Source

File details

Details for the file toil-http-parser-0.8.8.tar.gz.

File metadata

  • Download URL: toil-http-parser-0.8.8.tar.gz
  • Upload date:
  • Size: 98.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.7

File hashes

Hashes for toil-http-parser-0.8.8.tar.gz
Algorithm Hash digest
SHA256 e0622c7c83eafbcb57cda4ffd82cac5fed9a0eed0f10da8043910ac7e50f6b3a
MD5 e9ce495b59ae9b013c82a5ae273dda32
BLAKE2b-256 4166f7b9619d2dd356d1280b31b088ce466155f960b7cd00e2d87117cc6ef63a

See more details on using hashes here.

File details

Details for the file toil_http_parser-0.8.8-py3.7-linux-x86_64.egg.

File metadata

File hashes

Hashes for toil_http_parser-0.8.8-py3.7-linux-x86_64.egg
Algorithm Hash digest
SHA256 8ca5a7a35cb44e7bc446477ef23d3cc35876fe2844a4492fcf14002c7a38d255
MD5 52efbaa19721d0ff8f89313425d53713
BLAKE2b-256 062b5db7b8705c8728fc37a07a8caa4a3f1e14c8f29e47703b87d96e293b794f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page