Return 使用 mitmproxy 的自定义响应
Return custom response with mitmproxy
我正在尝试 return 使用带有以下代码的 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 状态代码,headers och body 明文
[1,1] 200 OK
Content-Type: text/html
<html><body>hello world</body></html>
我如何 return 将其作为实际 "http" 响应,以便 chrome 将其呈现为 html?
不要以http版本为例。将 [1, 1] 替换为 "HTTP/1.1"
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)
您还可以捕获响应并 edit/replace 它。
使用 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")
代码段应如下所示
from mitmproxy import http
def request(flow):
if flow.request.pretty_url.endswith("example.com/index.php"):
flow.response = http.HTTPResponse.make(
200,
"<html><body>hello world</body></html>",
{"content-type":"text/html"},
)
对于 mitmproxy
的较新版本。
我正在尝试 return 使用带有以下代码的 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 状态代码,headers och body 明文
[1,1] 200 OK
Content-Type: text/html
<html><body>hello world</body></html>
我如何 return 将其作为实际 "http" 响应,以便 chrome 将其呈现为 html?
不要以http版本为例。将 [1, 1] 替换为 "HTTP/1.1"
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)
您还可以捕获响应并 edit/replace 它。
使用 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")
代码段应如下所示
from mitmproxy import http
def request(flow):
if flow.request.pretty_url.endswith("example.com/index.php"):
flow.response = http.HTTPResponse.make(
200,
"<html><body>hello world</body></html>",
{"content-type":"text/html"},
)
对于 mitmproxy
的较新版本。