使用Werkzeug解析原始HTTP请求

2024-04-28 23:55:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为烧瓶应用程序编写一个fuzzer。我有一些示例请求存储为文本文件,如下所示获取.txt公司名称:

GET /docs/index.html HTTP/1.1
Host: www.w3.org

理想情况下,我会将其解析为一个werkzeug.wrappers.Request对象,如下所示(psuedo代码):

^{pr2}$

然而,在Werkzeug中似乎没有进行原始的HTTP解析。相反,Werkzeug从BaseHTTPServer.BaseHTTPRequestHandler获取一个WSGI环境,这需要一个BaseHTTPServer.HTTPServer实例来解析请求。对这么简单的事情来说,这似乎太过分了。在

我还遇到了http-parser,它与我想要的更接近,但是它复制了Werkzeug的大多数数据结构,并且类型不兼容。我得把数据从一个转换到另一个。在

在Werkzeug中,有没有一种从原始HTTP请求到WSGI环境的更简单的方法(或者使用没有HTTP服务器的BaseHTTPRequestHandler)?在


Tags: txt名称应用程序http示例wsgiget环境
1条回答
网友
1楼 · 发布于 2024-04-28 23:55:38

我没有找到一种简单的方法来实现这一点,所以我编写了一个名为Werkzeug-Raw的库来解析WSGI环境中的原始HTTP请求(甚至是在测试客户机上打开请求)。在

它是这样工作的:

from flask import Flask, request
import werkzeug_raw

app = Flask(__name__)

environ = werkzeug_raw.environ('GET /foo/bar?tequila=42 HTTP/1.1')

with app.request_context(environ):
    print request.args  # ImmutableMultiDict([('tequila', u'42')])

要在测试客户端上打开原始HTTP请求,请执行以下操作:

^{pr2}$

相关问题 更多 >