ycoya / guzzlehttp-resume
通过范围下载资源,并在下载中断后能够继续下载。
Requires
- guzzlehttp/guzzle: ^7.8
This package is auto-updated.
Last update: 2024-10-02 01:46:12 UTC
README
Guzzlehttp-resume 是 guzzlehttp 的包装器,允许分块下载。如果下载中断,可以在稍后继续下载,无需从头开始。这仅在服务器支持部分请求的情况下才可能。
它有两个类 ClientResume 和 ClientHttpResume。这两个类的区别在于 ClientResume 有设置操作和设置的函数,而 ClientHttpResume 是第一个类的包装器,允许设置类似于 guzzlehttp 的选项。
这不会影响 guzzlehttp 的主要功能,如果你已经在代码中使用了它,不需要进行重大更改,只需用这些类之一替换 guzzlehttp,你应该会得到相同的结果。需要做出的更改是新的选项和新的分块下载方法。请参阅示例文件夹以获得更好的理解。
以下是一些使用这些类的示例。
使用 ClientResume
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientResume; $client = new ClientResume(); $url = "https://video.com.test?file=V_20230702_195006_ES6.mp4"; $options = [ 'verify' => false, ]; echo "starting download<br>"; $client->downloadChunkSize = 10*1024*1024; $client->setDebug(true); $client->setfilePath("descarga/video.mp4"); $client->resume('GET', $url, $options);
使用 ClientHttpResume
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; $url = "https://video.com.test?file=V_20230702_195006_ES6.mp4"; $options = [ 'verify' => false, 'clientResume' => [ 'chunkSize'=> 10 * 1024 *1024, 'filePath' => "descarga/video.mp4", 'debug' => true ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', $url, $options);
安装
composer require ycoya/guzzlehttp-resume
要求
php 8.0+
选项
这些都是可以设置的选项
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientResume; use GuzzleHttp\Client; $guzzleClient = new Client(['base_uri' => 'http://httpbin.org']); $client = new ClientResume(); $client->setClient($guzzleClient); $client->downloadChunkSize = 10*1024*1024; $client->setfilePath("descarga/video.mp4"); $client->setPartialExtension("partFile"); $client->setHandler(GuzzleHttp\HandlerStack::create()); $client->setDebug(true); $client->setDebugVerbose(true); $client->resume('GET', 'video');
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; use GuzzleHttp\Client; $guzzleClient = new Client(['base_uri' => 'http://httpbin.org']); $options = [ 'handler' => GuzzleHttp\HandlerStack::create(), 'clientResume' => [ 'client' => $guzzleClient, 'chunkSize'=> 10 * 1024 *1024, 'filePath' => "descarga/video.mp4", 'partialExt' => "partFile", 'debug' => true, 'debugVerbose' => true, ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', 'video', $options);
Guzzle 选项也可以在数组中设置。所有设置在 clientResume 键外的选项都是针对 guzzle 选项的。
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; $options = [ 'base_uri' => 'http://httpbin.org', 'handler' => GuzzleHttp\HandlerStack::create(), 'clientResume' => [ 'chunkSize'=> 10 * 1024 *1024, 'filePath' => "descarga/video.mp4", 'partialExt' => "partFile", 'debug' => true ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', 'video', $options);
当使用 ClientHttpResume 类时,您必须设置一个名为 clientResume 的键,并在其中设置所有需要的选项。
#客户端选项
实际上,不需要设置 GuzzleClient 对象。当创建 ClientHttpResume 或 ClientResume 时,也会创建一个 GuzzleClient 对象,所以如果您需要传递选项,请在 clientResume 键选项之外设置它。假设我们需要设置基础 URI 选项到 guzzleClient。它可以像上面示例那样设置。同样,处理器也可以。
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; $options = [ 'base_uri' => 'http://httpbin.org', 'clientResume' => [ ... ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', 'video', $options);
但是,假设您已经有一个 GuzzleClient 对象,并且不能替换它为 ClientHttpResume。在这种情况下,您可以设置选项 client 并将其传递给 ClientHttpResume,它将使用 GuzzleClient 对象中设置的 所有设置在恢复或开始下载时。
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; use GuzzleHttp\Client; $guzzleClient = new Client(['base_uri' => 'http://httpbin.org']); $options = [ 'clientResume' => [ 'client' => $guzzleClient, ... ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', 'video', $options);
#块大小选项
不需要设置此值,因为 ClientHttpResume 或 ClientResume 内部使用默认值,但如果您需要自定义它,必须将此值设置为字节。在下一个示例中,我们设置一个块大小为 10 MB。
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; $url = "https://video.com.test?file=V_20230702_195006_ES6.mp4"; $options = [ 'clientResume' => [ 'chunkSize' => 10 * 1024*1024 // in bytes. ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', $url, $options);
#filePath 选项
这也是可选的。如果没有提供文件路径,应用程序将尝试通过其 URL 构建文件名。filePath 是一个字符串,它应该包含文件名。
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; $url = "https://video.com.test?file=V_20230702_195006_ES6.mp4"; $options = [ 'clientResume' => [ 'filePath' => "C:/downloads/video.mp4" ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', $url, $options);
#partialExt 选项
这是在完整下载前用于临时下载文件的扩展名。默认情况下,应用程序使用 part 作为扩展名。例如: video.mp4.part
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; $url = "https://video.com.test?file=V_20230702_195006_ES6.mp4"; $options = [ 'clientResume' => [ 'partialExt' => "filePart" ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', $url, $options);
#处理器选项
此选项是为了设置一个 GuzzleHttp\HandlerStack,如果需要的话。有关如何构建它的信息,请参阅来自 guzzlehttp/guzzle 的文档。要传递此选项,请将其放在 ClientResume 键之外。它被设置为 guzzle 选项。我们在这里说明这一点是因为这个处理器在内部被修改,以添加自己的中间件,以便能够分块下载。
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; $url = "https://video.com.test?file=V_20230702_195006_ES6.mp4"; $handler = GuzzleHttp\HandlerStack::create(); $options = [ 'handler' => $handler 'clientResume' => [ ... ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', $url, $options);
#debug 选项
debug 选项启用创建路径为 debug/log-{timestamp}.log 的日志记录操作。除了这个文件,还会在名为 stats 的文件夹中转储 guzzle 状态。
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; $url = "https://video.com.test?file=V_20230702_195006_ES6.mp4"; $handler = GuzzleHttp\HandlerStack::create(); $options = [ 'clientResume' => [ 'debug' => true ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', $url, $options);
#debugVerbose 选项
debugVerbose 选项启用将服务器发送的整个响应体记录到日志文件。此选项也启用内部调试。
<?php require 'vendor/autoload.php'; use Ycoya\GuzzleHttpResume\ClientHttpResume; $url = "https://video.com.test?file=V_20230702_195006_ES6.mp4"; $handler = GuzzleHttp\HandlerStack::create(); $options = [ 'clientResume' => [ 'debugVerbose' => true ] ]; $client = new ClientHttpResume(); $client->downloadResume('GET', $url, $options);