使用来自 API 的 wp_remote_post 请求下载文件

Posted

技术标签:

【中文标题】使用来自 API 的 wp_remote_post 请求下载文件【英文标题】:Download file using wp_remote_post request from API 【发布时间】:2018-10-20 14:21:14 【问题描述】:

我正在根据给定的参数和详细信息向端点发出 API 请求,它将以 PDF 格式发回一份报告,供我查看我发送给它的详细信息。我正在使用 wp_remote_post 的 WordPress,但无法将文件下载到计算机。

关于downloading a file in php via REST 的这个问题很有帮助,但不能完全处理相同类型的事情/场景,所以我一直坚持如何让它按照我的需要工作。

这是我使用 PHP var_dump 得到的回复:

'date' => string 'Thu, 10 May 2018 11:25:00 GMT' (length=29)
'server' => string 'Apache/2.4.7 (Ubuntu)' (length=21)
'content-disposition' => string 'attachment; filename="xyz.pdf"' (length=37)
'cache-control' => string 'no-cache, private' (length=17)
'x-ratelimit-limit' => string '60' (length=2)
'x-ratelimit-remaining' => string '58' (length=2)
'content-type' => string 'application/pdf' (length=15)

在响应的正文部分,我得到了这个:

  'body' => string '%PDF-1.4
1 0 obj
<<
/Title ( title )
/Creator ( creator )
/Producer ( producer )
/CreationDate ( creationdate )
'... (length=22237)

我从回复中相信 wkhtmltopdf 是创建正在发回的 PDF 的库/框架。如何将此文件以 PDF 文件的形式下载到计算机上并提供给请求它的用户?

我尝试过回复回复并使用urldecode,但我不确定这是什么回复以及如何处理。

【问题讨论】:

【参考方案1】:

您可能只需要设置正确的响应标头。您可以使用“wp_remote_retrieve_body”获取响应正文,设置标题并回显 PDF 数据。下面是一个例子:

$data = wp_remote_retrieve_body($response);
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="somefile.pdf"');
echo $data;

这应该会导致文件自动下载。如果您希望文件显示在浏览器窗口中,请使用“内联”作为 Content-Disposition 标头。

header('Content-Disposition: inline');

【讨论】:

我已经添加了您在上面发布的代码,但我似乎收到了 ERR_INVALID_RESPONSE 错误。 This other answer 帮助修复了无效响应,我需要将这两个参数添加到 header 函数中。但是,谢谢,因为这肯定让我走上了正确的道路。非常感谢。

以上是关于使用来自 API 的 wp_remote_post 请求下载文件的主要内容,如果未能解决你的问题,请参考以下文章

连接到 wp_remote_post Wordpress 时,Softlayer ISP 阻止网络退出

WordPress wp_remote_post

如何使用来自 API 的 JSON 填充选择列表?

如何使用需要来自另一个 API 端点(dog.ceo)的数据的 API 端点?

通过 API-KEY 使用来自外部 API 的数据的 Alexa 技能

如何使用 RxSwift 和 Alamofire 库调用来自另一个 API 的响应的 API?