跳转到主要内容

http请求/响应解析器

项目描述

http-parser

http-parser是一个与Python 2.x (>=2.7)、Python 3和Pypy兼容的HTTP请求/响应解析器。如果可能的话,将使用基于Ryan Dahl的http-parser的C解析器。

http-parser采用MIT许可证。

项目网址: https://github.com/benoitc/http-parser/

Build Status

要求

  • Python 2.7或更高版本。Pypy最新版本。

  • 如果您需要重新构建C代码,则需要Cython(Pypy不需要)

安装

$ pip install http-parser

或从源安装

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

注意:如果在MacOSX上遇到错误,请尝试使用以下参数进行安装

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

使用

http-parser提供您在Python程序中可以访问的低级别解析器 parser.HttpParser,并提供 http.HttpStream,它提供对可读、顺序io.RawIOBase对象的更高级别访问。

为了帮助您在日常工作,http-parser在reader模块中提供了3种类型的读取器:IterReader用于读取可迭代对象,StringReader用于读取字符串和StringIO对象,SocketReader用于读取套接字或具有相同api的对象(需要recv_into)。当然,您可以使用任何io.RawIOBase对象。

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()

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()

更多文档可以在代码中找到(或使用文档生成器)。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

http-parser-0.9.0.tar.gz (167.1 kB 查看哈希值)

上传时间

构建分发

http_parser-0.9.0-py3.7-macosx-10.15-x86_64.egg (86.1 kB 查看哈希值)

上传时间

http_parser-0.9.0-cp37-cp37m-macosx_10_15_x86_64.whl (70.9 kB 查看哈希值)

上传时间 CPython 3.7m macOS 10.15+ x86-64

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面