为什么curl只在生产服务器上下载100个字节?

时间:2017-03-25 22:31:48

标签: php curl

我遇到的问题是我试图从我的服务器下载一个示例文件,但是只保存了100个字节而从未保存完整文件,当我在本地主机上时,我可以下载整个文件。

我使用的代码是:

// https://pgli96.oloadcdn.net/dl/l/7Cfk7N6ajhk19Byr/tr6gjooZMj0/big_buck_bunny_240p_5mb.3gp.mp4?mime=true to view the file in browser
$url = 'https://pgli96.oloadcdn.net/dl/l/H8-l9DTbn5X1eBid/tr6gjooZMj0/big_buck_bunny_240p_5mb.3gp.mp4';
set_time_limit(0);
$fp = fopen (storage_path('app/download/test.mp4'), 'w+');
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);

我真的很困惑,为什么它不适用于生产Linux服务器。卷曲也安装在那里。任何帮助将非常感谢!

非常感谢。

1 个答案:

答案 0 :(得分:2)

CDN提供商阻止来自不同位置的呼叫。从生产系统加载相同的URL时,CDN提供程序意识到自请求资源以来ISP已发生更改。

当我打开该网址时,我只能得到答案

  

{" status":403," msg":"下载ISP与请求ISP不同。要求:AS20115下载:AS3320"}

这个答案恰好包含98个字节,最后添加一个CRLF就可以生成100个字节。

检查你的文件内容,你会看到,它不是资源的前100个字节,而是我上面引用的答案。

要检查文件,只需使用cat(在shell上)显示其内容:

> cat <filename>

我想,唯一的解决方案是生成对您想要直接从服务器加载的资源的请求(也许您可以使用lynx来执行此操作)