[英]Parse raw HTTP request with Werkzeug
我正在為Flask應用程序編寫一個模糊器。 我將示例請求存儲為文本文件,例如get.txt:
GET /docs/index.html HTTP/1.1
Host: www.w3.org
理想情況下,我werkzeug.wrappers.Request
解析為werkzeug.wrappers.Request
對象,類似這樣的東西(偽代碼):
from werkzeug.wrappers import Request
req = Request()
with open('get.txt') as f:
req.parse_raw(f.read())
但是,看起來Werkzeug中沒有發生原始HTTP解析。 相反,Werkzeug從BaseHTTPServer.BaseHTTPRequestHandler獲取WSGI環境,這需要BaseHTTPServer.HTTPServer實例來解析請求。 對於這么簡單的事情來說,這似乎有些過分。
我也遇到了http-parser ,它更接近我想要的東西,但它復制了大多數Werkzeug的數據結構與不兼容的類型。 我必須將數據從一個轉換為另一個。
是否有更簡單的方法從原始HTTP請求轉到Werkzeug中的WSGI環境(或使用沒有HTTP服務器的BaseHTTPRequestHandler)?
沒有找到一個簡單的方法,所以我編寫了一個名為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請求:
client = app.test_client()
rv = werkzeug_raw.open(client, 'GET /foo/bar?tequila=42 HTTP/1.1')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.