Скачать файл с помощью запроса wp_remote_post из API - PullRequest
0 голосов
/ 10 мая 2018

Я делаю запрос API к конечной точке, которая на основе заданных параметров и деталей отправит мне отчет в формате PDF для просмотра с подробностями, которые я ему отправил. Я использую WordPress, используя wp_remote_post, но не могу загрузить файл на компьютер.

Этот вопрос о загрузке файла в PHP через 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 Ответ

0 голосов
/ 10 мая 2018

Вероятно, вам просто нужно установить правильные заголовки ответа. Вы можете получить тело ответа с помощью 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;

Это должно привести к автоматической загрузке файла. Если вы предпочитаете, чтобы файл отображался в окне браузера, используйте «inline» для заголовка Content-Disposition.

header('Content-Disposition: inline');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...