我正在努力获取由外部服务器生成的PDF文件。
如您所见,不需要身份证明。
我注意到我可以在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);
答案 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 );