PHP cURL:回传内容类型:application/pdf 给调用者

问题描述 投票:0回答:1

我正在调用一个 Web 服务,该服务返回一个内容类型为 application/pdf 的 PDF 文件

我可以从浏览器或 Postman 调用 Web 服务,并显示结果文件。

现在我想从 PHP 调用相同的服务,并将响应返回给调用 PHP 的客户端。

我有这个

$url = 'https://localhost:7174/customers/123/pdf';
$expectedMimeType = 'application/pdf';
$token = '****************************************';

$curl = curl_init();

curl_setopt_array(
  $curl,
  array(
    CURLOPT_URL => $url,
    CURLOPT_HTTPHEADER => array(
      'Authorization: Bearer '.$token,
      'Accept: '.$expectedMimeType
    )
  )
);

curl_exec($curl);
exit();

我认为 CURLOPT_RETURNTRANSFER 默认为 false,因此 PHP 只会将响应传递给 PHP 的调用者,这似乎确实发生了,但它正在发送回来

Content-Type: text/html; charset=UTF-8

因此,PDF 文件在浏览器(或 Postman)中显示为二进制冗长的内容。

如何让它发回正确的内容类型?理想情况下,我想传递来自其他 Web 服务的 Content-Type,这样如果其他服务返回其他 MIME 类型,我的 PHP 只会传递它,但现在,我知道它只会返回 PDF ,所以如果需要的话我可以硬编码应用程序/pdf。

php curl mime-types
1个回答
0
投票

感谢 ADyson 引导我走向正确的方向。老实说,我认为这行不通

<?php

$url = 'https://localhost:7174/customers/123/pdf';
$expectedMimeType = 'application/pdf';
$token = '****************************************';

$curl = curl_init();

curl_setopt_array(
  $curl,
  array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array(
      'Authorization: Bearer '.$token,
      'Accept: '.$expectedMimeType
    )
  )
);

$response = curl_exec($curl);
$info = curl_getinfo($curl);
header('Content-Type: '.$info['content_type']);
echo $response;
exit();

但确实如此。 $response 作为字符串返回,并且使用正确的内容类型回显它效果非常好。我认为因为响应是二进制数据,所以当 PHP 将其转换为字符串时,它会丢失一些东西。

© www.soinside.com 2019 - 2024. All rights reserved.