andy87 / curl-requester
该包最新版本(dev-main)没有可用的许可证信息。
cURL请求的装饰器/构建器
dev-main
2022-12-13 22:27 UTC
Requires
- php: >=7.4
- ext-curl: *
- ext-json: *
- ext-mbstring: *
This package is auto-updated.
Last update: 2024-09-30 01:43:38 UTC
README
curl-requester
一个用于通过cURL函数发送请求的多功能类。
可解决的问题/目标
1. 发送请求的统一入口点
2. 易于使用(简单的接口和配置)
使用示例代码。
/** @var andy87\curl_requester\Curl $curl */ //GET запрос $resp = $curl->get( 'vk.com/id806034' )->response(); // string // Получение ответа в качестве объекта с запросом методом POST $respObject = $curl->post( 'vk.com/user/add', [ 'name' => 'and_y87' ])->run()->asObject(); // object // Имитация запроса методом PATCH с получением тестовых данных $response = $curl->patch( 'vk.com/user/get', ['id' => 806034]) ->setTestResponse('{"name" : "Андрей", "do" : "code"}') ->run(); //Получение данных $respArray = $response->asArray(); // ['name' => 'Андрей', 'do'=> 'code'] $http_code = $response->httpCode;
映射
代码示例中的变量
- $response -
andy87\curl_requester\entity\Response
类的对象 - $request -
andy87\curl_requester\entity\Request
类的对象 - $query -
andy87\curl_requester\entity\Query
类的对象
更详细
提供6种方法/请求:GET、POST、PUT、PATCH、HEAD、DELETE
所有方法调用方式相同。
- 构造函数 - 接受参数
- string url - 要进行请求的地址
- array params - 请求参数 (非必需)
/** @var andy87\curl_requester\Curl $curl */ /** @var andy87\curl_requester\entity\Response $curl */ $request = $curl->get('https://andy87.ru'); $request = $curl->post('www.andy87.ru/search', [ 'text' => 'php' ]);
- 响应(response)。
可以通过多种方式获取响应
- 将响应转换为对象( object )
/** @var andy87\curl_requester\Curl $curl */ $respObject = $curl->get('www.andy87.ru/data')->asObject(); // object
- 将响应转换为数组( array )
/** @var andy87\curl_requester\Curl $curl */ $respArray = $curl->get('www.andy87.ru/data')->asArray(); // array
- 文本 ( string )
/** @var andy87\curl_requester\Curl $curl */ /** @var andy87\curl_requester\entity\Response $response */ $resp = $curl->get('www.andy87.ru')->response(); // string //Аналог $response = $curl->get('www.andy87.ru')->run(); // Вернёт объект класса `Response` (информацию об ответе) $resp = $response->response; //Аналог(краткая запись) $resp = $curl->get('www.andy87.ru')->run()->response; $resp = $curl->get('www.andy87.ru')->response();
响应信息。
Response::class
- response - 请求的响应
- httpCode - 请求的响应代码
/** @var andy87\curl_requester\Curl $curl */ $response = $curl->post( 'www.andy87.ru')->run(); //Вернёт объект класса `Request` (данные запроса). $respArray = $response->asArray(); // ['name' => 'Андрей', 'do'=> 'code'] $httpCode = $response->httpCode; //Код ответа сервера $query = $response->getQuery(); //Вернёт объект класса `Query` (информацию о запросе.)
请求信息。
Query::class
- method - 请求方法
- url - 请求地址
- postFields - 请求数据
- headers - 请求头
- curlOptions - cURL请求选项
- response - 请求的响应
- httpCode - 请求的响应代码
/** @var andy87\curl_requester\Curl $curl */ /** @var andy87\curl_requester\entity\Query $query */ $query = $curl->post( 'www.andy87.ru')->run()->getQuery(); $method = $query->method; $url = $query->url; $headers = $query->headers; $postFields = $query->postFields; $curlOptions= $query->curlOptions; $response = $query->response; $http_code = $query->httpCode; $isPost = $query->isPost(); //... и т.д. ( isGet(), isPut() ... )
附加功能
返回测试数据
- setTestResponse( string $response, int $http_code ) - 请求不会执行,将返回指定的响应。
- string $response - 模拟的响应
- int $http_code - 模拟的响应代码(默认为200)
/** @var andy87\curl_requester\Curl $curl */ $resp = $curl->post('www.crm.ru/get-user', ['id' => 123]) ->setTestResponse(json_encode(['name'=>'Андрей', 'do'=>'code']), 302 ) ->response();
扩展/补充请求头
- addHeaders( array $array ) - 添加的头部
/** @var andy87\curl_requester\Curl $curl */ $resp = $curl->post('www.crm.ru/get-user', ['id' => 123]) ->addHeaders(['Content-Type: application/json']) ->response();
准备数据
- prepareParams( string $postField ) - 请求数据不会通过 http_build_query() 处理,它们被认为是已经准备好用于请求的
/** @var andy87\curl_requester\Curl $curl */ $resp = $curl->post( 'www.vk.com/806034') ->prepareParams( http_build_query(['id' => 123]) ) ->response(); // Аналог $params = http_build_query(['id' => 123]); $resp = $curl->post( 'www.vk.com/806034', $params )->prepareParams()->response();
使用基本认证
- setBasicAuth( string $token ) - 添加到头部
Authorization: Basic eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9
/** @var andy87\curl_requester\Curl $curl */ $resp = $curl->post('www.crm.ru/get-user', ['id' => 123]) ->setBasicAuth('eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9') ->response();
附加cURL选项
- addCurlOptions( array $array ) - 附加的cURL选项用于 curl_setopt()
/** @var andy87\curl_requester\Curl $curl */ $resp = $curl->post('www.crm.ru/get-user/delete', ['id' => 123]) ->addCurlOptions([ CURLOPT_FOLLOWLOCATION => true]) ->response();
使用Cookie
- useCookie( string $cookie, string $path ) - 使用cookie。设置
CURLOPT_COOKIE
CURLOPT_COOKIEJAR
CURLOPT_COOKIEFILE
/** @var andy87\curl_requester\Curl $curl */ $resp = $curl->post('www.crm.ru/get-user', ['id' => 123]) ->useCookie('cookiename=cookievalue', '/tmp/cookies.txt') ->response();
禁用SSL检查
- disableSSL() - 禁用SSL检查。设置
CURLOPT_SSL_VERIFYPEER => false
CURLOPT_SSL_VERIFYHOST => false
/** @var andy87\curl_requester\Curl $curl */ $resp = $curl->post( 'www.crm.ru/get-user', ['id' => 123]) ->disableSSL() ->response();
允许重定向
- enableRedirect() - 如果服务器响应需要重定向,允许重定向。设置
CURLOPT_FOLLOWLOCATION => true
/** @var andy87\curl_requester\Curl $curl */ $resp = $curl->post( 'www.vk.com/806034') ->enableRedirect() ->response();
获取请求的扩展信息。
- addCurlInfo( array $curl_info ) - 补充要获取的请求信息列表
/** @var andy87\curl_requester\Curl $curl */ $query = $curl->post('www.vk.com/806034') ->addCurlInfo([CURLINFO_EFFECTIVE_URL]) // Добавление необходимой информации к ответу ->run() ->getQuery(); $last_url = $query->info[ CURLINFO_EFFECTIVE_URL ]; //Получение информации
设置事件函数
- setEvent( string $event, callable $function ) - 事件中的回调函数将被调用
- string $event - 事件键。可用
- Request::EVENT_RUN - 在请求之前和初始化cURL resource之前
- 请求::EVENT_BEFORE_REQUEST - 在请求前,初始化 cURL 资源之后
- 请求::EVENT_AFTER_REQUEST - 在请求后,初始化 cURL 资源之后
- 可调用 $function - 被调用的函数
- string $event - 事件键。可用
use andy87\curl_requester\entity\Query /** @var andy87\curl_requester\Curl $curl */ $request = $curl->post('www.vk.com/806034'); //пример: задать некий callBack после запроса $request->setEvent( Request::EVENT_AFTER_REQUEST, function ( Query $query, $curlHandler ) { // some code } ); $resp = $request->run()->response;
设置回调函数
- setCallback( 可调用 $callback ) - 在收到服务器响应后立即调用,并在关闭 curlHandler 之前执行的功能( 请求::EVENT_AFTER_REQUEST )
use andy87\curl_requester\entity\Query /** @var andy87\curl_requester\Curl $curl */ $request = $curl->post('www.vk.com/806034'); $request->setCallback(function ( Query $query, $curlHandler ) { if ( $query->httpCode !== Query::OK ) { $errors = curl_error( $curlHandler ); curl_close( $curlHandler ); exit( $errors ); } }); $resp = $request->run()->response;
通过 Request 实现自定义 cURL
use andy87\curl_requester\entity\Request $ch = Request::createCurlHandler( 'www.vk.com/806034', [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => 1, CURLOPT_HTTPHEADER => [ 'some headers' ], CURLOPT_POSTFIELDS => http_build_query([ 'some params' ]) ]); $resp = curl_exec( $ch ); curl_close($ch); // Аналог(кратная запись) $resp = Request::send( 'www.vk.com/806034', [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => 1, CURLOPT_HTTPHEADER => [ 'some headers' ], CURLOPT_POSTFIELDS => http_build_query([ 'some params' ]) ]);
安装
依赖
- php ( >= 7.4 )
- ext-curl
- ext-json
- ext-mbstring
composer.json
使用 composer 安装
在 composer.json
中添加
require
"require": {
...
"andy87/curl-requester" : "dev-main"
},
repositories
"repositories": [
...,
{
"url": "git@github.com:andy87/curl-requester.git",
"type": "vcs"
}
]
如果本地未安装 composer,则从 官方网站 下载 composer.phar 到项目根目录。
在控制台执行以下命令,如果本地已安装 composer
日志
- 1.3.5
- 添加:examples 目录
- 更新
请求
- 编辑:createCurlHandler()
- 添加:send()
- README