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/
要求:
- 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()
您可以在代码中找到更多的文档(或使用文档生成器)。在
版权所有
2011-2013(c)贝诺•切斯诺(Benoît Chesneau<;benoitc@e-engura.org>
- 项目
标签: