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

使用WordPress的wp_remote_post从API下载PDF文件遇阻求助

解决WordPress中wp_remote_post获取PDF后无法触发下载的问题

你已经拿到了API返回的完整PDF数据和正确响应头,问题出在没给浏览器发送正确的下载指令——直接echo内容会被浏览器当成普通文本处理。下面是具体的解决步骤和代码:

核心思路

要触发浏览器下载PDF,得先输出标准的HTTP响应头,明确告诉浏览器“这是一个需要下载的PDF文件”,接着输出PDF原始内容,最后必须阻止WordPress输出其他额外内容(比如主题的页眉页脚),避免破坏PDF结构。

完整代码示例

// 发起API请求(替换成你的实际请求参数)
$api_response = wp_remote_post('你的API端点地址', [
    'body' => [
        // 填写你需要传给API的参数
        'param1' => 'value1',
        'param2' => 'value2'
    ],
    // 如果API需要认证或自定义请求头,在这里添加
    'headers' => [
        'Authorization' => 'Bearer your_token' // 示例,根据实际情况调整
    ]
]);

// 先检查请求是否成功
if (is_wp_error($api_response)) {
    echo '请求API失败:' . $api_response->get_error_message();
    return;
}

// 提取响应头和PDF原始内容
$response_headers = wp_remote_retrieve_headers($api_response);
$pdf_raw_content = wp_remote_retrieve_body($api_response);

// 从Content-Disposition头里提取文件名
$download_filename = 'report.pdf'; // 默认文件名
if (isset($response_headers['content-disposition'])) {
    // 用正则匹配出header里的文件名
    preg_match('/filename="?([^"]+)"?/', $response_headers['content-disposition'], $filename_matches);
    if (!empty($filename_matches[1])) {
        $download_filename = $filename_matches[1];
    }
}

// 关键:输出下载所需的HTTP头
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . $download_filename . '"');
header('Content-Length: ' . strlen($pdf_raw_content));
// 禁止缓存,避免旧文件干扰下载
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

// 输出PDF原始内容
echo $pdf_raw_content;

// 必须立即退出,防止WordPress输出主题其他内容破坏PDF
exit;

注意事项

  1. 执行时机:这段代码必须在WordPress输出任何内容之前运行——比如放在自定义页面模板的最顶部,或者自定义的WP REST路由里。如果已经有输出(比如主题的header),会导致header()函数报错。
  2. 不要用urldecode:API返回的body已经是PDF的原始二进制数据,var_dump显示的字符串形式只是PHP对二进制数据的可读表示,直接输出即可,不需要额外解码。
  3. 错误处理:记得处理API请求失败的情况,避免给用户输出混乱内容。

这样处理后,用户访问这个页面/端点时,浏览器就会自动触发PDF文件的下载,文件名就是API返回的xyz.pdf。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:55:37