pbergman/curl-multi

一个简单的curl多请求处理包装器

1.2.1 2019-10-16 11:50 UTC

This package is auto-updated.

Last update: 2024-08-29 12:39:10 UTC


README

这是一个围绕curl多请求处理的(轻量级)抽象层,用于处理异步请求。

该库的目的是使处理响应更加容易,同时尽可能接近curl。这应该会使API更加稳定,更容易使用(当熟悉curl时),并且与curl相关的代码更少。

提供的请求因此不会超过一个数组,就像您用 curl_setopt_array 注册的那样。因此,URL、标题等应使用curl方法 CURLOPT_URL、CURLOPT_WRITEHEADER、CURLOPT_HTTPHEADER 注册,其余的可以在这里找到。

示例

use PBergman\CurlMulti\MultiHandler;
use PBergman\CurlMulti\Request;

$null = fopen("/dev/null", "w");
$handler = new MultiHandler(
    new Request([
        CURLOPT_URL => "http://httpstat.us/200?sleep=5000",
        CURLOPT_FILE  => $null,
    ]),
    new Request([
        CURLOPT_URL => "http://httpstat.us/404",
        CURLOPT_FILE  => $null,
    ])
);

try {
    foreach ($handler->getResponse() as $response) {
        printf(
            "request '%s' finished with code %d in %0.2fs\n",
            $response->getInfo(CURLINFO_EFFECTIVE_URL),
            $response->getInfo(CURLINFO_RESPONSE_CODE),
            $response->getInfo(CURLINFO_TOTAL_TIME)
        );
    }
} finally {
    // register cleanup
    $handler->close();
}

应该给出以下输出

request 'http://httpstat.us/404' finished with code 404 in 0.45s
request 'http://httpstat.us/200?sleep=5000' finished with code 200 in 5.49s

公共API

__construct(RequestInterface ...$request): MultiHandler

MultiHandler构造函数接受请求,因此您可以在创建新实例时注册您的请求。

(new MultiHandler(
    new Request([
        CURLOPT_URL => "http://httpstat.us/200?sleep=5000",
        CURLOPT_FILE  => $null,
    ]),
    new Request([
        CURLOPT_URL => "http://httpstat.us/404",
        CURLOPT_FILE  => $null,
    ])
))->wait();
setOptions(array $options) :bool

为多请求处理设置选项

addOption(int $key, $value) :bool

为多请求处理设置选项

add(RequestInterface $request): MultiHandler

将请求添加到定义的实例。

defer(): void

注册关闭函数以供关闭时使用。

init(): void

将设置curl多处理程序,这在创建新实例时将被调用,并在调用关闭方法时可能很有用。

getResponse(): \Generator|ResponseInterface[]

返回一个完成的请求和/或阻塞,直到有一个完成。

wait() : array||ResponseInterface[]

等待所有请求完成