{"id":13813147,"url":"https://github.com/benoitc/http-parser","last_synced_at":"2025-05-16T02:08:18.331Z","repository":{"id":63777105,"uuid":"1614732","full_name":"benoitc/http-parser","owner":"benoitc","description":"HTTP request/response parser for python in C","archived":false,"fork":false,"pushed_at":"2024-05-21T14:05:11.000Z","size":3981,"stargazers_count":344,"open_issues_count":21,"forks_count":96,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-05-15T00:19:33.715Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/benoitc.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-04-14T15:33:36.000Z","updated_at":"2025-02-10T21:39:10.000Z","dependencies_parsed_at":"2024-01-13T15:37:19.727Z","dependency_job_id":"1bea0be5-d4ec-4864-a1d3-8f4a5fcff9a2","html_url":"https://github.com/benoitc/http-parser","commit_stats":{"total_commits":202,"total_committers":31,"mean_commits":6.516129032258065,"dds":"0.38613861386138615","last_synced_commit":"d6ce4b5c58e68d5cf3be0676d9b97c3bd9ca88df"},"previous_names":[],"tags_count":101,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benoitc%2Fhttp-parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benoitc%2Fhttp-parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benoitc%2Fhttp-parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benoitc%2Fhttp-parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/benoitc","download_url":"https://codeload.github.com/benoitc/http-parser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254453655,"owners_count":22073617,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-04T04:01:04.667Z","updated_at":"2025-05-16T02:08:18.280Z","avatar_url":"https://github.com/benoitc.png","language":"C","readme":"http-parser\n-----------\n\nHTTP request/response parser for Python compatible with Python 2.x\n(\u003e=2.7), Python 3 and Pypy. If possible a C parser based on\nhttp-parser_ from Ryan Dahl will be used.\n\nhttp-parser is under the MIT license.\n\nProject url: https://github.com/benoitc/http-parser/\n\n.. image::\n    https://secure.travis-ci.org/benoitc/http-parser.png?branch=master\n    :alt: Build Status\n    :target: https://travis-ci.org/benoitc/http-parser\n\nRequirements:\n-------------\n\n- Python 2.7 or sup. Pypy latest version.\n- Cython if you need to rebuild the C code (Not needed for Pypy)\n\nInstallation\n------------\n\n::\n\n    $ pip install http-parser\n\nOr install from source::\n\n    $ git clone git://github.com/benoitc/http-parser.git\n    $ cd http-parser \u0026\u0026 python setup.py install\n\n\nNote: if you get an error on MacOSX try to install with the following\narguments:\n\n    $ env ARCHFLAGS=\"-arch i386 -arch x86_64\" python setup.py install\n\nUsage\n-----\n\nhttp-parser provide you **parser.HttpParser** low-level parser in C that\nyou can access in your python program and **http.HttpStream** providing\nhigher-level access to a readable,sequential io.RawIOBase object.\n\nTo help you in your day work, http-parser provides you 3 kind of readers\nin the reader module: IterReader to read iterables, StringReader to\nreads strings and StringIO objects, SocketReader to read sockets or\nobjects with the same api (recv_into needed). You can of course use any\nio.RawIOBase object.\n\nExample of HttpStream\n+++++++++++++++++++++\n\nex::\n\n    #!/usr/bin/env python\n    import socket\n\n    from http_parser.http import HttpStream\n    from http_parser.reader import SocketReader\n\n    def main():\n        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        try:\n            s.connect(('gunicorn.org', 80))\n            s.send(\"GET / HTTP/1.1\\r\\nHost: gunicorn.org\\r\\n\\r\\n\")\n            r = SocketReader(s)\n            p = HttpStream(r)\n            print p.headers()\n            print p.body_file().read()\n        finally:\n            s.close()\n\n    if __name__ == \"__main__\":\n        main()\n\nExample of HttpParser:\n++++++++++++++++++++++\n\n::\n\n    #!/usr/bin/env python\n    import socket\n\n    # try to import C parser then fallback in pure python parser.\n    try:\n        from http_parser.parser import HttpParser\n    except ImportError:\n        from http_parser.pyparser import HttpParser\n\n\n    def main():\n\n        p = HttpParser()\n        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        body = []\n        try:\n            s.connect(('gunicorn.org', 80))\n            s.send(\"GET / HTTP/1.1\\r\\nHost: gunicorn.org\\r\\n\\r\\n\")\n\n            while True:\n                data = s.recv(1024)\n                if not data:\n                    break\n\n                recved = len(data)\n                nparsed = p.execute(data, recved)\n                assert nparsed == recved\n\n                if p.is_headers_complete():\n                    print p.get_headers()\n\n                if p.is_partial_body():\n                    body.append(p.recv_body())\n\n                if p.is_message_complete():\n                    break\n\n            print \"\".join(body)\n\n        finally:\n            s.close()\n\n    if __name__ == \"__main__\":\n        main()\n\n\nYou can find more docs in the code (or use a doc generator).\n\n\nCopyright\n---------\n\n2011-2020 (c) Benoît Chesneau \u003cbenoitc@e-engura.org\u003e\n\n\n.. http-parser_ https://github.com/ry/http-parser\n","funding_links":[],"categories":["C"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenoitc%2Fhttp-parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenoitc%2Fhttp-parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenoitc%2Fhttp-parser/lists"}