paulzi/multicurl

MultiCurl. curl_multi_init 的包装器。

v0.1.0 2016-10-14 07:59 UTC

This package is auto-updated.

Last update: 2024-09-12 22:32:03 UTC


README

curl_multi_init 的包装器。

Packagist Version Total Downloads

提供两个类

  • MultiCurl - 带有事件的 curl_multi_init 简单包装器
  • MultiCurlQueue - MultiCurl 的扩展版本,带有请求队列、重试失败请求和多线程。

安装

通过 Composer 安装

composer require paulzi/multicurl:~0.1.0

或者添加

"paulzi/multicurl" : "~0.1.0"

到你的 composer.json 文件的 require 部分。

用法

function generateCurl($url)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL,            $url);
    curl_setopt($curl, CURLOPT_HEADER,         false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_ENCODING,       '');
    return $curl;
}


// usage MultiCurl
$request = new MultiCurlRequest();
$request->curl = generateCurl('https://google.com');
$request->onSuccess = function($request, $response, $content) {
    var_dump('Success', $content);
};
$request->onError = function($request, $response, $content, $errCode, $errMsg) {
    var_dump('Error', $errMsg);
};

$loader = new MultiCurl();
$loader->add($request);
$loader->run();


// usage MultiCurlQueue
$request1 = new MultiCurlRequest();
$request1->curl = generateCurl('https://google.com');
$request1->onSuccess = function($request, $response, $content) {
    var_dump('Request1 Success', $content);
};
$request1->onRetry = function($request, $response, $content, $errCode, $errMsg) {
    var_dump('Request1 Retry', $errMsg);
};
$request1->onError = function($request, $response, $content, $errCode, $errMsg) {
    var_dump('Request1 Error', $errMsg);
};

$request2 = new MultiCurlRequest();
$request2->curl = generateCurl('http://none.noexist');
$request2->onSuccess = function($request, $response, $content) {
    var_dump('Request2 Success', $content);
};
$request2->onRetry = function($request, $response, $content, $errCode, $errMsg) {
    var_dump('Request2 Retry', $errMsg);
};
$request2->onError = function($request, $response, $content, $errCode, $errMsg) {
    var_dump('Request2 Error', $errMsg);
};

$loader = new MultiCurlQueue();
$loader->threads = 2;
$loader->retry   = 3;
$loader->run([$request1, $request2]);

文档

MultiCurl

  • add($request) - 将请求添加到任务
  • run() - 执行请求
  • onBefore($request) - 在执行请求之前的事件
  • onSuccess($request, $response, $content) - 请求成功事件
  • onError($request, $response, $content, $errCode, $errMsg) - 请求错误事件
  • onAlways($request, $response, $content) - 总是请求事件

MultiCurlQueue

  • run($requests) - 执行请求
  • onBefore($request) - 在执行请求之前的事件
  • onSuccess($request, $response, $content) - 请求成功事件
  • onError($request, $response, $content, $errCode, $errMsg) - 请求错误事件
  • onAlways($request, $response, $content) - 总是请求事件
  • onRetry($request, $response, $content, $errCode, $errMsg, $retryIndex, $retryTotal) - 重试请求事件

MultiCurlRequest

  • $curl - curl 资源
  • $onBefore - 执行请求之前的回调
  • $onSuccess - 请求成功回调
  • $onError - 请求错误回调
  • $onAlways - 总是请求回调
  • $onRetry - 重试请求回调