如何使用 PHP 下载生成的 pdf 文件?

How to download a generated pdf file with PHP?

我正在努力获取由外部服务器生成的 PDF 文件。

这是 link 资源:https://www.test.colisprive.com/mcadesk/Externe/ShowEtiquettePDF.aspx/etiquette_colis-23-23000000000833300-PDF_DEFAUT-N/

如您所见,不需要身份证明。

我注意到我可以在 URL 的末尾写任何我想要的东西,它会被浏览器集成的 pdf reader 解释为标题。但是当使用 "save as..." 时,文件名已经设置为固定值。

我试图用 cURL 得到它,但它 returns "Object moved to here."(link),除了 link 不起作用和使用一个 CURLOPT_FOLLOWLOCATION returns 错误。

我真的需要从这个 URL 下载 pdf 文件,但我完全卡住了,欢迎任何想法!!

谢谢, BR,

马努

编辑: 我试过了:

$curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_HTTPHEADER => array(
        ),
        CURLOPT_URL=>"https://www.test.colisprive.com/mcadesk/Externe/ShowEtiquettePDF.aspx/etiquette_colis-23-23000000000833300-PDF_DEFAUT-N/Etiquette_23000000000833300.pdf",
        CURLOPT_RETURNTRANSFER => 1,
    ));

    $resp = curl_exec($curl);
    var_dump($resp);

    curl_close($curl);

如果请求未提供 User-Agent header.

,则提到的网站不会提供请求的内容(而是发出重定向)

PHP 的 CURL 默认不设置 User-Agent,也不设置 file_get_contents。不同的是,命令行 curl 和 Python 的 urllib.request.urlretrieve 可以,这就是您成功使用后者的原因。

使用 PHP 的 CURL 你必须自己设置 User-Agent 但它只是一行。

请注意,您访问的网站需要它,但接受 任何 User-Agent

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_HTTPHEADER => array(
        "User-Agent: curl" // <--- the User Agent is specified by setting the corresponding header
    ),
    CURLOPT_URL=>"https://www.test.colisprive.com/mcadesk/Externe/ShowEtiquettePDF.aspx/etiquette_colis-23-23000000000833300-PDF_DEFAUT-N/Etiquette_23000000000833300.pdf",
    CURLOPT_RETURNTRANSFER => 1
));

$resp = curl_exec($curl);

var_dump($resp);

curl_close($curl);

您得到的输出如下所示:

%PDF-1.4
1 0 obj
<< 
/Length 1514
/Filter /FlateDecode
.
.
.

您实际上收到的是 PDF。


然后您可以提供获取的 PDF

echo $resp;

或将文件存储在您的服务器上

file_put_contents( "/path/to/file", $resp );