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

时间:2020-06-02 11:15:40

标签: php pdf php-curl

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

以下是资源链接:https://www.test.colisprive.com/mcadesk/Externe/ShowEtiquettePDF.aspx/etiquette_colis-23-23000000000833300-PDF_DEFAUT-N/

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

我注意到我可以在URL的末尾写任何内容,浏览器集成的pdf阅读器会将其解释为标题。但是,当使用“另存为...”时,文件名已经设置为固定值。

我尝试使用cURL来获取它,但是它返回“对象已移至此处。”(链接),除了链接不起作用并且使用CURLOPT_FOLLOWLOCATION返回false。

我真的需要从该URL下载pdf文件,但是我完全被卡住了,任何想法都将非常受欢迎!!

谢谢, BR,

Manu

编辑: 我尝试了这个:

$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);

1 个答案:

答案 0 :(得分:2)

如果请求中没有提供User-Agent标头,则所提及的网站将不提供所请求的内容(而是发出重定向)。

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 );