xicrow/php-curl

PHP 的 cURL 封装和工具

1.0.0 2022-09-17 11:11 UTC

This package is not auto-updated.

Last update: 2024-09-15 18:57:23 UTC


README

PHP 的 cURL 封装和工具

注意:早期版本仍可能发生重大更改

安装

推荐通过 Composer 安装。

composer require xicrow/php-curl

或者直接添加到 composer.json

{
    "require": {
        "xicrow/php-curl": "~1.0"
    }
}

示例

请求

创建新的 Request

$request = new Request();

Request 构造函数上设置 cUrl 选项

$request = new Request([
    CURLOPT_URL       => 'example.com',
    CURLOPT_USERAGENT => 'Mozilla/4.0',
    CURLOPT_TIMEOUT   => 5,
]);

通过 CurlOptions 实例在 Request 上设置 cUrl 选项

$request->curlOptions()->set(CURLOPT_URL, 'example.com')->set(CURLOPT_USERAGENT, 'Mozilla/4.0');
$request->curlOptions()->set([
    CURLOPT_TIMEOUT        => 5,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_MAXREDIRS      => 3,
]);

响应

从执行 Request 获取 Response

$response = $request->execute();

Response 获取正文

$response->body();

Response 上的 Headers 实例获取所有头信息

$response->headers()->get();

Response 上的 Headers 实例获取特定头信息

$response->headers()->getHttpStatusCode();
$response->headers()->get('Http-Status-Code');
$response->headers()->get([
    'Http-Status-Code',
    'Http-Status-Message',
]);

批量处理

使用选项创建新的 Batch

$batch = new Batch([
    'max_concurrent_requests' => 5,
]);

一次添加一个 Request

$batch->addRequest(new Request());

或者一次性添加多个 Request

$batch->addRequests([
    new Request(),
    new Request(),
    new Request(),
]);

Batch 上设置 CurlOptions,这将与 Request 上的 CurlOptions 合并

$batch->curlOptions()->set([
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_PORT           => 80,
]);

执行 Batch 并循环处理 RequestResponse
注意:有几种方式可以匹配 RequestResponse,这主要是为了说明目的

$batch->execute();
foreach ($batch->getRequests() as $requestIndex => $request) {
    foreach ($batch->getResponses() as $responseIndex => $response) {
        // Skip if request and response index does not match
        if ($requestIndex != $responseIndex) {
            continue;
        }

        // ...
    }
}

待办事项

  • 单元测试
  • CurlOptions 添加更多实用方法
  • Headers 添加更多实用方法
  • 可能重构 CurlOptionsHeaders 以及如何获取/设置它们

许可证

版权所有 © 2022 Jan Ebsen。许可协议为 MIT 许可。