bayfrontmedia / multi-curl
一个简单的HTTP客户端,用于通过cURL库进行单次或异步请求。
Requires
- php: ^8.0
- ext-curl: *
- ext-json: *
- bayfrontmedia/php-array-helpers: ^2.0
- bayfrontmedia/php-mime-types: ^2.0
README
一个简单的HTTP客户端,用于通过cURL库进行单次或异步请求。
许可证
此项目是开源的,可在MIT许可证下获取。
作者
需求
- PHP
^8.0
- cURL PHP扩展
- JSON PHP扩展
安装
composer require bayfrontmedia/multi-curl
使用
单次HTTP请求
use Bayfront\MultiCurl\Client;
$client = new Client();
可以设置一个基本URL,这样未来的请求相关方法就不必指定完整的端点。例如
use Bayfront\MultiCurl\Client;
$client = new Client('https://jsonplaceholder.typicode.com');
$response = $client->get('posts/1'); // Endpoint from the base URL
echo $response->getBody();
cURL句柄将自动创建并准备好使用。
异步HTTP请求
可以同时发出多个HTTP请求,而不是依次发出,从而将完成时间限制为单个最慢请求的持续时间,而不是所有请求的总和。
use Bayfront\MultiCurl\Async;
$async = new Async();
可以设置一个基本URL,这样未来的请求相关方法就不必指定完整的端点。例如
use Bayfront\MultiCurl\Async;
use Bayfront\MultiCurl\ClientException;
$async = new Async('https://jsonplaceholder.typicode.com');
$ids = [
'posts',
'comments'
];
$async->create($ids);
try {
$async
->use('posts')->get('posts/1')
->use('comments')->get('comments/1');
} catch (ClientException $e) {
die($e->getMessage());
}
$async->execute();
foreach ($ids as $id) {
try {
echo $async->use($id)->getBody();
} catch (ClientException $e) {
die($e->getMessage());
}
}
在开始使用之前,必须使用create()
方法显式创建cURL句柄。
公共方法
仅异步类
一旦创建了一个cURL句柄,可以使用以下方法
请求
响应
- getHeaders
- getHeader
- getBody
- getErrorNumber
- isError
- getErrorMessage
- getStatusCode
- getInfo
- isInformational
- isSuccessful
- isRedirection
- isClientError
- isServerError
- isOk
- isForbidden
- isNotFound
create
描述
(仅在Async
类中可用)
使用标识符创建cURL句柄。
cURL句柄在可以使用之前必须创建。
参数
$ids
(数组)
返回
- (self)
示例
use Bayfront\MultiCurl\Async;
$async = new Async('https://jsonplaceholder.typicode.com');
$ids = [
'posts',
'comments'
];
$async->create($ids);
use
描述
(仅在Async
类中可用)
设置当前cURL句柄。
使用create()
创建cURL句柄后,可以通过指定要使用的句柄ID来使用它。
如果ID不存在,将抛出Bayfront\MultiCurl\ClientException
异常。
参数
$id
(字符串)
返回
- (self)
抛出
Bayfront\MultiCurl\ClientException
示例
use Bayfront\MultiCurl\Async;
use Bayfront\MultiCurl\ClientException;
$async = new Async('https://jsonplaceholder.typicode.com');
$ids = [
'posts',
'comments'
];
$async->create($ids);
try {
$async
->use('posts')->get('posts/1')
->use('comments')->get('comments/1');
} catch (ClientException $e) {
die($e->getMessage());
}
$async->execute();
execute
描述
(仅在Async
类中可用)
执行给定的cURL会话。
只有在调用execute()
方法之后,响应方法才会返回结果。
参数
- None
返回
- (self)
示例
有关使用的示例,请参见上面的示例。
getHandle
描述
返回cURL句柄。
如果句柄不存在,将抛出Bayfront\MultiCurl\ClientException
异常。
参数
- None
返回
- (资源): cURL句柄
抛出
Bayfront\MultiCurl\ClientException
reset
描述
重置所有请求设置。
参数
- None
返回
- (self)
close
描述
重置所有设置并关闭cURL句柄。
注意:此方法在类析构函数中调用。
参数
- None
返回
- (self)
setOptions
描述
为cURL会话设置选项数组。
参数
$options
(数组)
返回
- (self)
示例
$client->setOptions([
CURLOPT_HEADER => false
]);
setHeaders
描述
为cURL会话设置头数组。
参数
$headers
(数组)
返回
- (self)
示例
$client->setHeaders([
'Content-Type' => 'application/json; charset=UTF-8'
]);
setToken
描述
使用给定的令牌设置令牌授权头。
参数
$token
(字符串)
返回
- (self)
download
描述
(仅在Client
类中可用)
在浏览器中开始文件下载。
参数
$url
(字符串)
返回
- (void)
示例
$client = new Client();
$client->download('https://www.example.com/image.jpg');
get
描述
执行GET
请求,包括作为查询参数发送的可选数据。
参数
$url
(字符串)$data = []
(数组)
返回
- (self)
示例
$client = new Client('https://jsonplaceholder.typicode.com');
$response = $client->get('posts/1');
connect
描述
执行CONNECT
请求,包括可选数据。
参数
$url
(字符串)$data = []
(数组)$json_encode = false
(布尔值): 如果尚未定义,则将$data
数组进行json_encode并设置Content-Type
头部为application/json
返回
- (self)
delete
描述
执行DELETE
请求,包括可选数据。
参数
$url
(字符串)$data = []
(数组)$json_encode = false
(布尔值): 如果尚未定义,则将$data
数组进行json_encode并设置Content-Type
头部为application/json
返回
- (self)
head
描述
执行HEAD
请求,包括可选数据。
参数
$url
(字符串)$data = []
(数组)$json_encode = false
(布尔值): 如果尚未定义,则将$data
数组进行json_encode并设置Content-Type
头部为application/json
返回
- (self)
options
描述
执行OPTIONS
请求,包括可选数据。
参数
$url
(字符串)$data = []
(数组)$json_encode = false
(布尔值): 如果尚未定义,则将$data
数组进行json_encode并设置Content-Type
头部为application/json
返回
- (self)
patch
描述
执行PATCH
请求,包括可选数据。
参数
$url
(字符串)$data = []
(数组)$json_encode = false
(布尔值): 如果尚未定义,则将$data
数组进行json_encode并设置Content-Type
头部为application/json
返回
- (self)
post
描述
执行POST
请求,包括可选数据。
参数
$url
(字符串)$data = []
(数组)$json_encode = false
(布尔值): 如果尚未定义,则将$data
数组进行json_encode并设置Content-Type
头部为application/json
返回
- (self)
put
描述
执行PUT
请求,包括可选数据。
参数
$url
(字符串)$data = []
(数组)$json_encode = false
(布尔值): 如果尚未定义,则将$data
数组进行json_encode并设置Content-Type
头部为application/json
返回
- (self)
trace
描述
执行TRACE
请求,包括可选数据。
参数
$url
(字符串)$data = []
(数组)$json_encode = false
(布尔值): 如果尚未定义,则将$data
数组进行json_encode并设置Content-Type
头部为application/json
返回
- (self)
getHeaders
描述
返回上一个请求的头部数组。
参数
- None
返回
- (数组)
示例
$client = new Client('https://jsonplaceholder.typicode.com');
$response = $client->get('posts/1');
print_r($response->getHeaders());
getHeader
描述
从上一个请求返回单个头部值,如果不存在则可选默认值。
参数
$header
(字符串)$default = NULL
(混合类型)
返回
- (混合类型)
示例
$client = new Client('https://jsonplaceholder.typicode.com');
$response = $client->get('posts/1');
echo $response->getHeader('Date');
getBody
描述
返回上一个请求的正文,如果不存在则可选默认值。
参数
$json_decode = false
(布尔值): 将JSON内容解码为数组$default = NULL
(混合类型)
返回
- (混合类型)
示例
$client = new Client('https://jsonplaceholder.typicode.com');
$response = $client->get('posts/1');
echo $response->getBody();
getErrorNumber
描述
返回上一个请求的错误编号,如果没有错误则为零。
参数
- None
返回
- (整数)
示例
$client = new Client('https://jsonplaceholder.typicode.com');
$response = $client->get('posts/1');
echo $response->getErrorNumber();
isError
描述
上一个请求是否有错误。
参数
- None
返回
- (布尔值)
getErrorMessage
描述
返回上一个请求的错误消息,如果没有错误发生则为空字符串。
参数
- None
返回
- (字符串)
getStatusCode
描述
返回上一个请求的状态码,如果不存在则为零。
参数
- None
返回
- (整数)
getInfo
描述
返回关于上一个请求的信息数组,单个选项常量,或不存在时为null。
参数
$opt = NULL
(混合类型): 可选选项常量
更多信息请参阅:curl_getinfo
返回
- (混合类型)
isInformational
描述
状态码是否为信息性。
参数
- None
返回
- (布尔值)
isSuccessful
描述
状态码是否为成功。
参数
- None
返回
- (布尔值)
isRedirection
描述
状态码是否为重定向。
参数
- None
返回
- (布尔值)
isClientError
描述
状态码是否为客户端错误。
参数
- None
返回
- (布尔值)
isServerError
描述
状态码是否为服务器错误。
参数
- None
返回
- (布尔值)
isOk
描述
状态码是否为OK(200)。
参数
- None
返回
- (布尔值)
isForbidden
描述
状态码是否为禁止(403)。
参数
- None
返回
- (布尔值)
isNotFound
描述
状态码是否为未找到(404)。
参数
- None
返回
- (布尔值)