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第三方库


热门话题
java使图像以正确的速度在屏幕上移动,以适应所有显示   内存Java分配:从预先存在/分配的池中分配对象   java这种书写方式?   Java正则表达式查找字符串的开头   java是否可以创建一个类来处理安卓中的所有日志代码(例如log.d(TAG,message))   如何使用Selenium和java单击WebTable任意页面上的WebElement   java解析字符串中的文件名   java刷新JTree内容   java如何覆盖RequestMappingHandler   爪哇数石头、布、剪刀赢了多少   struts中的java无效令牌   swing JTree,优化算法,Java   java Tomcat和SSL:密钥库格式无效