我正在努力获取一个由外部服务器生成的PDF文件。
所以你可以看到,不需要识别。
我注意到,我可以在URL的末尾写任何我想要的东西,它将被浏览器集成的pdf阅读器解释为标题。但是当使用 "另存为... "时,文件的名称已经被设置为一个固定的值。
我试着用cURL获取,但它返回 "Object moved to here."(链接),除了链接不起作用,使用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
头。
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 );