You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Arjun相关Python代码实现原始HTTP请求导出至文本文件求助

问题核心原因

你写的替换代码存在两个核心逻辑错误:

  • 你错误调用了result.method/result.headers等属性:当前text_export函数接收的result是所有扫描结果的总字典,循环内的单条请求信息都存在data变量里,不存在你调用的这些requests Response对象属性
  • 你只写了print打印逻辑,没有写入文本文件的逻辑,自然不会输出到你指定的输出文件里

修复后完整实现代码

替换你原有的text_export函数即可:

def text_export(result):
    """
    exports results to a text file with raw HTTP request format
    """
    with open(mem.var['text_file'], 'w+', encoding='utf8') as text_file:
        for url, data in result.items():
            clean_url = url.lstrip('/')
            populated_params = populate(data['params'])
            headers = data['headers'].copy()
            # 按原始HTTP格式构造请求
            if data['method'] == 'GET':
                # 构造GET请求行
                query_string = create_query_string(data['params'])
                if '?' in clean_url:
                    query_string = query_string.replace('?', '&', 1)
                request_line = f"GET {clean_url + query_string} HTTP/1.1"
                # 构造请求头
                header_str = '\r\n'.join([f"{k}: {v}" for k, v in headers.items()])
                # GET无请求体
                raw_request = f"{request_line}\r\n{header_str}\r\n\r\n"
                text_file.write(raw_request + "="*50 + "\n") # 分割线区分不同请求,不需要可删除
            elif data['method'] == 'POST':
                # 构造POST请求行
                request_line = f"POST {clean_url} HTTP/1.1"
                # 补全表单类型POST必要头
                if 'Content-Type' not in headers:
                    headers['Content-Type'] = 'application/x-www-form-urlencoded'
                query_string = create_query_string(data['params']).lstrip('?')
                headers['Content-Length'] = str(len(query_string))
                header_str = '\r\n'.join([f"{k}: {v}" for k, v in headers.items()])
                # 构造完整原始请求
                raw_request = f"{request_line}\r\n{header_str}\r\n\r\n{query_string}"
                text_file.write(raw_request + "\n" + "="*50 + "\n")
            elif data['method'] == 'JSON':
                request_line = f"POST {clean_url} HTTP/1.1"
                # 补全JSON类型POST必要头
                if 'Content-Type' not in headers:
                    headers['Content-Type'] = 'application/json'
                body = json.dumps(populated_params)
                headers['Content-Length'] = str(len(body))
                header_str = '\r\n'.join([f"{k}: {v}" for k, v in headers.items()])
                raw_request = f"{request_line}\r\n{header_str}\r\n\r\n{body}"
                text_file.write(raw_request + "\n" + "="*50 + "\n")

功能说明

  • 导出的原始请求严格符合HTTP协议规范,可直接导入Burp Suite、curl等工具直接重放
  • 自动补全Content-Type、Content-Length两个必要请求头,避免导出的请求无法正常使用
  • 不同请求之间默认加了分割线方便区分,不需要可自行删除对应写入分割线的代码行

内容的提问来源于stack exchange,提问作者Emad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:15:04