我在尝试使用带有以下代码的mitmproxy时返回自定义响应
from libmproxy.models import HTTPResponse
from netlib.http import Headers
def request(context, flow):
if flow.request.pretty_url.endswith("example.com/index.php"):
resp = HTTPResponse(
[1, 1], 200, "OK",
Headers(Content_Type="text/html"),
"<html><body>hello world</body></html>")
flow.reply(resp)
但结果并不像预期的那样,在浏览器中显示的是http状态代码,标题为och body为明文
[1,1] 200 OK
Content-Type: text/html
<html><body>hello world</body></html>
如何将其作为实际的“http”响应返回,以便chrome将其呈现为html?
答案 0 :(得分:1)
请勿将http版本设置为示例。将[1,1]替换为&#34; HTTP / 1.1&#34;
from libmproxy.models import HTTPResponse
from netlib.http import Headers
def request(context, flow):
if flow.request.pretty_url.endswith("example.com/index.php"):
resp = HTTPResponse(
"HTTP/1.1", 200, "OK",
Headers(Content_Type="text/html"),
"<html><body>hello world</body></html>")
flow.reply(resp)
答案 1 :(得分:0)
您也可以捕获响应并编辑/替换它。
使用BeautifulSoup也会让事情变得更轻松。
我的解决方案是创建一个html文件replace.html
并将其替换为原始响应:
import mitmproxy
from bs4 import BeautifulSoup
def response(flow):
if flow.request.pretty_host.endswith("example.com/index.php"):
soup.BeautifulSoup(open("replace.html"))
flow.response.content = str(soup).encode("utf8")
答案 2 :(得分:0)
代码段应如下所示
mitmproxy
适用于async
的较新版本。