如何使用 PHP 下载生成的 pdf 文件?
How to download a generated pdf file with PHP?
我正在努力获取由外部服务器生成的 PDF 文件。
如您所见,不需要身份证明。
我注意到我可以在 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 );
我正在努力获取由外部服务器生成的 PDF 文件。
如您所见,不需要身份证明。
我注意到我可以在 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 );