http请求/响应解析器

toil-http-parser的Python项目详细描述


http解析器

与python2.x兼容的Python HTTP请求/响应解析器 (>;=2.6)、Python3和Pypy。如果可能的话,一个基于 ^将使用Ryan Dahl的{a1}。在

http解析器使用MIT许可证。在

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

Build Status

要求:

  • Python2.6或sup。Pypy最新版本。在
  • Cython,如果您需要重建C代码(Pypy不需要)

安装

$ pip install http-parser

或从源安装:

^{pr2}$

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

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

使用

http解析器为您提供解析器.HttpParserC中的低级解析器 您可以在python程序和^{str 1}中访问$http.HttpStream提供 对可读的、连续的io.RawIOBase公司对象。在

为了帮助您的日常工作,http解析器为您提供了3种类型的阅读器 在reader模块中:IterReader读取iterables,StringReader读取iterables 读取字符串和StringIO对象,SocketReader读取套接字或 具有相同api的对象(recv_into needed)。你当然可以用任何 io.RawIOBase公司对象。在

HttpStream

例如:

#!/usr/bin/env python
import socket

from toil_http_parser.http import HttpStream
from toil_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 toil_http_parser.parser import HttpParser
except ImportError:
    from toil_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()

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
junit cucumber为什么会找到“runTest.java”来运行测试?   在Eclipse中找不到java KeyPairGenerator   java NotSerializableException即使在实现Serializable之后   noclassdeffounderror(java字符串连接)为什么会出现这种异常?   java Guice:将接口绑定到由动态代理创建的实例   使用Spring数据neo4j创建空间索引时发生java错误   java对于需要在50多个excel文件上运行并且每个文件平均包含25k行的项目,最佳的方法是什么   javaNIO中的java缓冲区写入/发送消息问题   如何在Java/eclipse中添加不调用super()的警告   JavaSpring:mvcUrl映射错误的id   java应该在getInstance或构造函数中使用Init方法吗?   安卓中的java空指针异常错误   java Jsoup不能完全获取原始html代码