我正在努力获取由外部服务器生成的 PDF 文件。
如您所见,无需身份证明。
我注意到我可以在 URL 末尾写任何我想要的内容,并且它会被浏览器集成的 pdf 阅读器解释为标题。但是当使用“另存为...”时,文件名已设置为固定值。
我尝试使用 cURL 获取它,但它返回“对象已移至此处。”(链接),除非该链接不起作用并且使用 CURLOPT_FOLLOWLOCATION 返回 false。
我真的需要从这个 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
,但这只是一行。
请注意,您访问的网站需要它,但接受任何用户代理
。
$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);
关于php - 如何使用 PHP 下载生成的 pdf 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62150771/