【问题标题】:Curl PHP getting/download file from dynamic link卷曲 PHP 从动态链接获取/下载文件
【发布时间】:2012-02-18 09:30:28
【问题描述】:

需要使用cURL从动态生成的链接下载

链接:something.com/fileid=hgkjfdhgfhdg

如果直接访问链接,它将显示下载框(文件保存选项)。

但如果使用 CURL 或 file_get_contents 它只返回文件名。

$URL = https://somewebsite.com/fileid=hgkjfdhgfhdg
$fp = fopen("test.txt", 'w');
$c = curl_init($URL);
curl_setopt($c, CURLOPT_FILE, $fp);  
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);  
$contents = curl_exec($c);
$info = curl_getinfo($c);
curl_close($c); 
fclose($fp);

来自动态链接 (test.txt) 的文件名是已知的。

网址 = https://storage-ec2-32.sharefile.com/download.ashx?dt=dtca3192857a45452c84bd14e7500c7f46

【问题讨论】:

  • 您是否尝试从rapidshare.com 之类的网站下载?仅供参考,他们使用 javascript,您需要模拟 javascript(例如计时器、ajax 令牌)
  • 您是否尝试过使用数据包嗅探工具(例如 Wireshark)来检查 HTTP 级别发生的情况?我怀疑这是由于网站接受或拒绝下载,因为某些识别 cookie 存在(或不存在)。
  • Shiplu,它是 ShareFile,这里是直接下载链接供下载storage-ec2-32.sharefile.com/… 它会显示带有 test.txt 的下载框

标签: php file dynamic curl download


【解决方案1】:

问题是由于您连接到 HTTPS URL 并且 cURL 库无法找到证明 ShareFile 证书真实性所需的根 CA 证书包。因此,cURL 会采取安全措施并在启动文件传输之前中止连接。

解决此问题的最佳方法是将 php.ini 中的 curl_cainfo PHP 配置开关设置为包含您需要的所有 CA 证书的文件的绝对路径(根据 PHP help page describing the cURL configuration switches),然后重启服务器。

如果您无法做到这一点,您可以通过添加完全禁用 SSL 证书验证

curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);

到您的代码,就在$contents = curl_exec($c); 行的上方。

请注意,最后一种解决方案是不安全的,但可能会在中间攻击中为人打开大门 - 将其用作最后的手段。

【讨论】:

  • 感谢您的帮助,不幸的是 curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);没有区别。
  • 最后一个问题,您确定您在脚本中正确引用了原始 URL 吗? (如果我添加了上述代码行,它对我有用)。
  • 另外,如果它仍然不起作用,您能否在 curl_exec() 调用之后添加一个 die(curl_error()); 行?这将显示错误是什么。
  • 感谢 elgaton,因为我已经提供了上面的链接并且您说它对您有用,如果您可以在此处发布确切的代码以便我可以测试它会很好(如果可能的话)。
  • 这里是:pastebin.com/3QK1PUXf。我添加了一些简单的错误检测。请注意,今天下载链接似乎已过期,如果您将其替换为新链接,它应该可以工作。
【解决方案2】:

首先,您应该将 CURLOPT_HEADER 设置为 0 以防止输出中出现标题。其次,你确定你打开的文件是可写的吗?你应该检查fopencurl_setopt的结果。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多