修改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
相关产品推荐
相关产品推荐

