当前位置: 首页 > 面试题库 >

如何使用cURL部分下载远程文件?

鄢子平
2023-03-14
问题内容

是否可以使用cURL部分下载远程文件?假设远程文件的实际文件大小为1000 KB。如何仅下载其中的前500 KB?


问题答案:

您还可以使用php-curl扩展名设置range标头参数。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.spiegel.de/');
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

但是如前所述,如果服务器不遵循该标头而是发送整个文件,则curl将下载所有文件。例如,http:
//www.php.net忽略标题。但是,您可以(另外)设置一个写函数回调,并在收到更多数据时中止请求,例如

// php 5.3+ only
// use function writefn($ch, $chunk) { ... } for earlier versions
$writefn = function($ch, $chunk) { 
  static $data='';
  static $limit = 500; // 500 bytes, it's only a test

  $len = strlen($data) + strlen($chunk);
  if ($len >= $limit ) {
    $data .= substr($chunk, 0, $limit-strlen($data));
    echo strlen($data) , ' ', $data;
    return -1;
  }

  $data .= $chunk;
  return strlen($chunk);
};

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.php.net/');
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $writefn);
$result = curl_exec($ch);
curl_close($ch);


 类似资料:
  • 我正在使用远程webdriver来执行一些测试。然而,在某个时候,我需要下载一个文件并检查其内容。 我使用远程webdriver如下(在中): 使用“正常”的webdriver,我可以在本地计算机上毫无问题地下载文件。然后我可以使用测试代码来验证下载文件的内容(可以根据测试参数而改变)。它不是对下载本身的测试,但我需要一种方法来验证生成文件的内容... 但是如何使用远程WebDriver来实现呢?

  • 问题内容: 我需要使用curl下载远程文件。 这是我的示例代码: 但是它不能处理大文件,因为它首先读取内存。 是否可以将文件直接流式传输到磁盘? 问题答案:

  • 问题内容: 我正在使用以下Java代码从Internet下载文件: 我想知道是否可以下载文件的一部分。例如,对于5MB的文件,下载最后2MB。 问题答案: 如果服务器支持(并且HTTP 1.1服务器 应支持 ),则可以使用范围请求: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35 此外,一次读取一个字符的效率非常低-您

  • 本文向大家介绍Dropbox API 使用Range Retrieval Requests通过curl下载文件的一部分,包括了Dropbox API 使用Range Retrieval Requests通过curl下载文件的一部分的使用技巧和注意事项,需要的朋友参考一下 示例 这会使用Range Retrieval Requests从远程路径/Homework/math/Prime_Numbers

  • 问题内容: 我正在尝试使用cURL从GitHub下载tarball ,但似乎没有重定向: 注意:wget对我有用: 但是我想使用cURL,因为最终我想用类似以下内容的内嵌来解压缩它: 我发现重定向后的URL原来是https://download.github.com/pinard- Pymacs-v0.24-beta1-0-gcebc80b.tar.gz ,但是我希望cURL足够聪明以至于可以理解

  • 我想上传一个文件到不同的服务器使用卷曲。我读过许多类似的问题,但我没有得到任何解决我的问题。下面是我现在得到的代码: 当我运行此脚本时,它将保持运行200秒,并以以下方式响应: Sep 17 20:56:58 xxxxx vsftpd[2613]:[user]确定登录:客户端“yyyyy” Sep 17 20:56:58 xxxxx vsftpd[2618]:[用户]FTP响应:客户端“YYYYY