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

标签 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,

马努

编辑: 我试过这个:

$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/

相关文章:

php - 从 MySQL 中的每个类别中选择 2 个产品

java - 如何在 Android java 中将 jpg 转换为 pdf

javascript - 通过 Flex 或 Javascript 与 3D PDF 交互

Java:使用 PDFBox 1 库从图像创建 PDF 页面

php - Android 通过 firebase 推送通知(服务器端)

php - 如何使用 php 获取服务器 CPU 使用率和 RAM 使用率?

php - 如何在自定义 WP 插件安装中创建 MySQL 触发器

php - 从 PHP 对象获取 cURL 命令

php - 无法让 php5-curl 在 Docker 中工作

php - 正则表达式如何向前看,看看是否有另一个匹配的结束部分?