1of0 / curly
1.0.0
2020-03-18 22:38 UTC
Requires
- php: ^7.2
- ext-curl: *
- ext-json: *
- 1of0/streams: ^0.1.3
- laminas/laminas-diactoros: ^1.0|^2.0
- psr/http-message: ^1.0
Requires (Dev)
- phpunit/phpunit: ^8.0
- roave/security-advisories: dev-master
Suggests
- ext-mbstring: *
README
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
的实现。分别是 CancellableHandler
和 StreamHandler
。
CancellableHandler
在实例化时提供了一个回调。在传输过程中,cURL 的进度事件被路由到处理程序,然后处理程序调用回调以确定是否应该中止传输。
StreamHandler
装饰了 CancellableHandler
,并且是挂钩到 cURL 的读和写回调的处理程序的示例。它可能不是非常有用,因为设置 CurlyOptions
对象中的 inputStream
和 outputStream
选项可以达到类似的效果,但它有助于演示回调的用法。
流的力量在于它允许您以块的形式读取/写入下载和上传。与流结合使用,您可以在处理大量数据时防止内存耗尽。