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

如何通过Postman测试脚本自动将API返回的Zip格式响应保存到本地?

解决Postman保存API二进制Zip响应的问题

我来帮你解决这个问题——核心问题出在你处理二进制响应的方式上:你用pm.response.text()获取Zip格式的二进制数据,这会把原始二进制流当成UTF-8字符串解析,直接破坏了Zip文件的结构,导致保存后的文件无法解压。下面是具体的修复方案:

1. 修改Postman测试脚本,正确传递二进制数据

我们需要把API返回的原始二进制数据转成Base64编码(因为JSON只能传输文本格式),再传给本地Python服务。修改后的脚本如下:

// 从请求URL中提取dataId,用于生成唯一文件名(可选但推荐)
const dataId = request.url.match(/download\/(\w+)/)[1];

// 服务器配置项
let opts = {
    requestName: request.name || `dataset_${dataId}`,
    fileExtension: 'zip',
    mode: 'writeFile',
    uniqueIdentifier: false,
    responseData: pm.response.binary().toString('base64') // 二进制转Base64编码
};

pm.sendRequest({
    url: 'http://localhost:3000/write',
    method: 'POST',
    header: 'Content-Type:application/JSON',
    body: {
        mode: 'raw',
        raw: JSON.stringify(opts)
    }
}, function (err, res) {
    if (err) {
        console.error('本地服务请求失败:', err);
    } else {
        console.log('文件保存成功:', res.text());
    }
});

2. 调整Python本地服务,正确解码并保存二进制文件

你的Python服务需要把收到的Base64字符串解码回原始二进制,再以wb(二进制写入)模式保存文件。这里给出一个Flask服务的示例:

from flask import Flask, request
import base64
import os

app = Flask(__name__)
# 自定义保存目录,避免文件混乱
SAVE_DIR = './lms_datasets'
os.makedirs(SAVE_DIR, exist_ok=True)

@app.route('/write', methods=['POST'])
def write_file():
    try:
        data = request.get_json()
        # 生成安全的文件名,替换特殊字符
        safe_filename = data['requestName'].replace('/', '_').replace(':', '_')
        file_path = os.path.join(SAVE_DIR, f"{safe_filename}.{data['fileExtension']}")
        
        # 解码Base64为二进制数据并写入文件
        binary_data = base64.b64decode(data['responseData'])
        with open(file_path, 'wb') as f:
            f.write(binary_data)
        
        return {'status': 'success', 'saved_path': file_path}
    except Exception as e:
        return {'status': 'error', 'message': str(e)}, 500

if __name__ == '__main__':
    app.run(host='localhost', port=3000, debug=True)

3. 额外优化建议

  • 批量处理效率提升:如果需要每日运行60+数据集,推荐用Newman(Postman的命令行工具)批量执行集合,配合上述脚本自动保存所有文件。
  • 避免文件覆盖:用dataId或时间戳作为文件名的一部分,确保每个数据集文件唯一。
  • 验证响应类型:确认API返回的Content-Type是application/zip,Postman会自动识别为二进制响应,确保pm.response.binary()能正确获取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:37:47