ycoya/guzzlehttp-resume

通过范围下载资源,并在下载中断后能够继续下载。

dev-master 2024-09-02 01:39 UTC

This package is auto-updated.

Last update: 2024-10-02 01:46:12 UTC


README

Guzzlehttp-resume 是 guzzlehttp 的包装器,允许分块下载。如果下载中断,可以在稍后继续下载,无需从头开始。这仅在服务器支持部分请求的情况下才可能。

它有两个类 ClientResumeClientHttpResume。这两个类的区别在于 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 对象。当创建 ClientHttpResumeClientResume 时,也会创建一个 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);

#块大小选项

不需要设置此值,因为 ClientHttpResumeClientResume 内部使用默认值,但如果您需要自定义它,必须将此值设置为字节。在下一个示例中,我们设置一个块大小为 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);