在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:benoitc/http-parser开源软件地址:https://github.com/benoitc/http-parser开源编程语言:C 53.6%开源软件介绍:http-parserHTTP request/response parser for Python compatible with Python 2.x (>=2.7), Python 3 and Pypy. If possible a C parser based on http-parser from Ryan Dahl will be used. http-parser is under the MIT license. Project url: https://github.com/benoitc/http-parser/ Requirements:
Installation$ pip install http-parser Or install from source: $ git clone git://github.com/benoitc/http-parser.git $ cd http-parser && python setup.py install Note: if you get an error on MacOSX try to install with the following arguments: $ env ARCHFLAGS="-arch i386 -arch x86_64" python setup.py install Usagehttp-parser provide you parser.HttpParser low-level parser in C that you can access in your python program and http.HttpStream providing higher-level access to a readable,sequential io.RawIOBase object. To help you in your day work, http-parser provides you 3 kind of readers in the reader module: IterReader to read iterables, StringReader to reads strings and StringIO objects, SocketReader to read sockets or objects with the same api (recv_into needed). You can of course use any io.RawIOBase object. Example of HttpStreamex: #!/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() Example of 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() You can find more docs in the code (or use a doc generator). Copyright2011-2020 (c) Benoît Chesneau <[email protected]> |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论