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

PHP中解析Curl请求返回的multipart/mixed类型响应

解析multipart/mixed类型的API响应(分离JSON与PDF内容)

绝对不要用正则表达式解析multipart响应——这种格式遵循严格的MIME规范,用现成的MIME解析库才是可靠且优雅的方案,完全能避免正则带来的边界错误和维护问题。以下是几种主流编程语言的实现示例:

Python 实现

利用Python标准库中的email模块(multipart格式与邮件MIME结构一致),可以轻松拆分响应内容:

import email
import json
from email import policy
import requests

# 发起API请求
response = requests.get("你的第三方API地址")

# 解析multipart响应
msg = email.message_from_bytes(response.content, policy=policy.default)

# 遍历每个部分,分离JSON和PDF
for part in msg.walk():
    # 跳过嵌套的multipart容器
    if part.is_multipart():
        continue
    
    content_type = part.get_content_type()
    if content_type == "application/json":
        # 提取并解析JSON
        json_content = part.get_content()
        json_data = json.loads(json_content)
        print("提取到的JSON数据:", json_data)
    elif content_type in ("application/octet-stream", "application/pdf"):
        # 提取PDF二进制内容
        pdf_bytes = part.get_content()
        # 保存到本地文件
        with open("label.pdf", "wb") as f:
            f.write(pdf_bytes)
        print("PDF文件已保存")

Java 实现

使用Apache HttpClient工具,自动解析multipart响应:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.entity.mime.MultipartEntity;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;

public class MultipartParser {
    public static void main(String[] args) throws Exception {
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            HttpGet request = new HttpGet("你的第三方API地址");
            HttpResponse response = client.execute(request);
            
            HttpEntity entity = response.getEntity();
            if (entity instanceof MultipartEntity) {
                MultipartEntity multipartEntity = (MultipartEntity) entity;
                
                for (HttpEntity part : multipartEntity.getParts()) {
                    String contentType = part.getContentType().getValue();
                    if (contentType.contains("application/json")) {
                        // 解析JSON
                        String jsonStr = org.apache.http.util.EntityUtils.toString(part, StandardCharsets.UTF_8);
                        ObjectMapper mapper = new ObjectMapper();
                        java.util.Map<String, Object> jsonData = mapper.readValue(jsonStr, new TypeReference<>() {});
                        System.out.println("提取到的JSON数据: " + jsonData);
                    } else if (contentType.contains("application/octet-stream") || contentType.contains("application/pdf")) {
                        // 提取并保存PDF
                        byte[] pdfBytes = org.apache.http.util.EntityUtils.toByteArray(part);
                        Files.write(Paths.get("label.pdf"), pdfBytes);
                        System.out.println("PDF文件已保存");
                    }
                }
            }
        }
    }
}

核心原理

multipart/mixed响应的结构由分隔符(boundary)、各个部分的头部(Content-Type等)和正文组成,专业的MIME解析库会严格按照RFC 2046规范处理这些元素:

  • 自动识别响应头中的boundary参数(示例中的uuid:edec021d-b138-4eca-9897-003b7e33e246)
  • 正确拆分不同部分,避免正文内容中出现类似分隔符的字符串导致错误
  • 自动处理编码、转义等细节

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:47:12