bayfrontmedia/multi-curl

一个简单的HTTP客户端,用于通过cURL库进行单次或异步请求。

v2.1.0 2024-04-03 13:40 UTC

This package is auto-updated.

Last update: 2024-09-03 14:28:50 UTC


README

一个简单的HTTP客户端,用于通过cURL库进行单次或异步请求。

许可证

此项目是开源的,可在MIT许可证下获取。

作者

Bayfront Media

需求

  • 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句柄,可以使用以下方法

请求

响应

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

返回

  • (布尔值)