Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用mitmproxy将表单键/值转换为正文帖子_Python_Mitmproxy - Fatal编程技术网

Python 使用mitmproxy将表单键/值转换为正文帖子

Python 使用mitmproxy将表单键/值转换为正文帖子,python,mitmproxy,Python,Mitmproxy,我正在尝试使用mitmproxy来适应来自客户端(监控代理)的请求,我无法更改这些请求 客户端无法向请求发布数据,例如JSON或SOAP XML数据。它只能发布表单名称/值对(或标题名称/值) 我正试图通过以下方式绕过这一限制: 让客户发布表单对:“假密钥=” 使用mitmproxy删除密钥并仅发布数据 使用替换表达式运行代理,只需去掉“phony_key=”一开始看起来不错 mitmproxy --replace /~bq/phony_param=/ 。。。当我调用curl的请求时产生

我正在尝试使用mitmproxy来适应来自客户端(监控代理)的请求,我无法更改这些请求

客户端无法向请求发布数据,例如JSON或SOAP XML数据。它只能发布表单名称/值对(或标题名称/值)

我正试图通过以下方式绕过这一限制:

  • 让客户发布表单对:“假密钥=”
  • 使用mitmproxy删除密钥并仅发布数据
使用替换表达式运行代理,只需去掉“phony_key=”一开始看起来不错

mitmproxy --replace /~bq/phony_param=/ 
。。。当我调用curl的请求时产生了一个很好的结果,比如

curl -d phony_param='<SOAP-ENV:Envelope></SOAP-ENV:Envelope> https://host:port/path
而curl调用发出的请求在hex视图中显示了未编码的XML

从那以后,我一直试图制作一个内联脚本来完成这项工作

def request(context, flow):
    if flow.request.method == "POST":
        form = flow.request.get_form_urlencoded()
        real_post = form.get("phony_param")[0]
        form.__delitem__("phony_param")
        print real_post
        flow.request.content = real_post
        flow.request.set_form_urlencoded(form)

在上面,我试图删除表单名称/值,将该值添加到请求内容中,并添加回修改后的表单。我认为我的线路不对,或者至少它还没有工作。

感谢mhils在这方面的帮助

脚本的问题是request.set_form_urlencoded和setting request.content都替换了脚本的内容。你应该设置一个或另一个

我错误地认为应该对代理过滤器进行编码,以便在传入请求中保留任何其他表单参数。但经过反思,HTTPPOST并没有混合不同的内容类型。因此,丢弃表单是正确的

修改后的脚本生成一个有效的请求:

def request(context, flow):
    if flow.request.method == "POST":
        form = flow.request.get_form_urlencoded()
        real_post = form.get_first("phony_param")
        if real_post:
            flow.request.content = real_post
def request(context, flow):
    if flow.request.method == "POST":
        form = flow.request.get_form_urlencoded()
        real_post = form.get_first("phony_param")
        if real_post:
            flow.request.content = real_post