1of0/curly

cURL 封装器

1.0.0 2020-03-18 22:38 UTC

This package is auto-updated.

Last update: 2024-09-19 08:09:55 UTC


README

pipeline status coverage report

Curly

Curly 是 PHP 的 cURL 扩展的一个面向对象的封装。

基本用法

要执行请求,您可以提供一个 URL 和 HTTP 方法,但也可以提供一个 PSR-7 的 RequestInterface 实例来配置 cURL 通道。

<?php

use OneOfZero\Curly\Curly;

$curly = new Curly();

// Using PSR-7 RequestInterface implementation
$request = (new Laminas\Diactoros\Request)
    ->withMethod('POST')
    ->withUri(new Laminas\Diactoros\Uri('https://example.com'))
    ->withHeader('Accepts', 'application/json');
    
$response = $curly->request($request);

// Using plain URL and method
$response = $curly->requestByUrl('https://example.com', 'DELETE');

// Using ExtendedServerRequest
$request = (new \OneOfZero\Curly\ExtendedServerRequest)
    ->withUriString('https://example.com', 'resource', '1337')
    ->withMethod('POST')
    ->withUrlEncodedForm(['foo' => 'bar'])
    ->withHeader('Accepts', 'application/json');

$response = $curly->request($request);

默认情况下,requestByUrl()request() 方法将返回一个 ResponseInterface。要手动处理响应,您可以配置回调或配置一个自定义处理程序(在底层将配置回调,但提供了一个更干净的编程接口)。

自定义配置

cURL 选项

通常通过 curl_setopt 设置的选项必须通过一个 CurlyOptions 实例来设置。该 CurlyOptions 实例可以在多个请求中重复使用。

自定义处理程序

而不是在 CurlyOptions 对象中手动配置回调,您可以通过扩展 AbstractHandler 类来挂钩到事件。该库提供了两个 AbstractHandler 的实现。分别是 CancellableHandlerStreamHandler

CancellableHandler 在实例化时提供了一个回调。在传输过程中,cURL 的进度事件被路由到处理程序,然后处理程序调用回调以确定是否应该中止传输。

StreamHandler 装饰了 CancellableHandler,并且是挂钩到 cURL 的读和写回调的处理程序的示例。它可能不是非常有用,因为设置 CurlyOptions 对象中的 inputStreamoutputStream 选项可以达到类似的效果,但它有助于演示回调的用法。

流的力量在于它允许您以块的形式读取/写入下载和上传。与流结合使用,您可以在处理大量数据时防止内存耗尽。