nginx抓取到的post请求数据如何还原回源格式文件?

新手上路,请多包涵


通过postman上传一个post请求,请求源是一个xlsx文件(内容如图),ELK抓取到nginx此次请求的数据(如图),同时postman也返回请求数据(如图),这种情况下如何实现请求体数据还原回xlsx并保存下来?如果请求源是其他格式文件又该这么修改?

1.尝试过python的flask框架和openpyxl,未能实现格式转换
2.尝试直接将数据复制下来在转换格式,但数据本就转译过,通过复制方式再转换数据可能不准确,且也没有尝试成功
希望结果:根据nginx的数据还原回post请求原始格式文件并在本地保存

阅读 399
avatarAI BotBETA

回答

要将 Nginx 抓取的 POST 请求数据(特别是上传的文件数据)还原回其原始格式(如 XLSX 文件),你可以使用以下方法。这里假设你已经从 Nginx 日志或 ELK Stack 中获取了请求体的原始内容(通常是 Base64 编码的多部分表单数据)。

步骤:

  1. 提取请求体数据

    • 从 Nginx 日志或 ELK Stack 中提取出完整的 POST 请求体数据。
    • 请求体数据通常是以 ------WebKitFormBoundary... 开头的多部分表单数据格式。
  2. 解析多部分表单数据

    • 识别并提取出文件部分的数据。文件部分通常包含 Content-Disposition: form-data; name="file"; filename="filename.xlsx"Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 等头部信息。
    • 提取出文件内容部分,这部分内容通常是 Base64 编码的。
  3. 解码文件内容

    • 对提取出的文件内容进行 Base64 解码。
  4. 保存文件

    • 将解码后的内容保存为 XLSX 文件。

Python 实现示例:

以下是一个使用 Python 的示例代码,展示了如何实现上述步骤:

import base64
import re

# 假设这是从 Nginx 日志或 ELK Stack 中提取的完整 POST 请求体数据
post_data = """
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="example.xlsx"
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwovUGFnZXMgMiAwIFIKJSVFT0YK
...
(此处省略了实际的 Base64 编码内容)
...
------WebKitFormBoundary7MA4YWxkTrZu0gW--
"""

# 正则表达式匹配文件内容部分
file_content_match = re.search(
    r'Content-Disposition: form-data; name="file"; filename=".*?"\r?\n'
    r'Content-Type: application/.*?\r?\n\r?\n'
    r'([A-Za-z0-9+/=]+)\r?\n',
    post_data, re.DOTALL
)

if file_content_match:
    # 解码 Base64 编码的文件内容
    file_content_base64 = file_content_match.group(1)
    file_content_bytes = base64.b64decode(file_content_base64)
    
    # 保存为 XLSX 文件
    with open('restored_file.xlsx', 'wb') as f:
        f.write(file_content_bytes)
    
    print("文件已成功还原并保存为 restored_file.xlsx")
else:
    print("未找到文件内容部分")

对于其他格式文件的修改:

  • 如果请求源是其他格式的文件(如 PDF、TXT、CSV 等),你只需要修改正则表达式中的 Content-Type 部分以匹配相应的 MIME 类型。
  • 保存文件时,确保文件名和扩展名与原始文件一致。

通过上述方法,你可以将 Nginx 抓取的 POST 请求数据还原回其原始的文件格式,并在本地保存。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏