webiik/curlhttpclient

CurlHttpClient 允许轻松通过 cURL 发送 HTTP 请求。

1.0 2019-02-28 21:18 UTC

This package is auto-updated.

Last update: 2024-09-29 05:28:15 UTC


README

CurlHttpClient

CurlHttpClient 允许轻松通过 cURL 发送 HTTP 请求。

安装

composer require webiik/curlhttpclient

示例

$chc = new \Webiik\CurlHttpClient\CurlHttpClient();

// Prepare simple GET request (CurlHttpClientReq)
$request = $chc->prepareRequest('https://www.google.com');

// Send request and receive response (CurlHttpClientRes)
$response = $chc->send($req);

摘要

CurlHttpClient

CurlHttpClient 准备由 CurlHttpClientReq 表示的 cURL 请求,发送 cURL 请求并接收由 CurlHttpClientRes 表示的 cURL 响应。它允许您一次发送多个请求。

prepareRequest

prepareRequest(string $url): CurlHttpClientReq

prepareRequest() 创建一个代表一系列 cURL 选项的对象 CurlHttpClientReq

$request = $chc->prepareRequest('https://www.google.com');

send

send(CurlHttpClientReq $req): CurlHttpClientRes

send() 使用 CurlHttpClientReq 中定义的选项发送 cURL 请求,返回 CurlHttpClientRes

$response = $chc->send($req);

sendMulti

sendMulti(array $requests): array

sendMulti() 异步一次发送多个 cURL 请求。一旦所有请求都完成,它将接收一个 CurlHttpClientRes 数组。

// Prepare multiple requests
$requests = [
    $chc->prepareRequest('https://www.google.com'),
    $chc->prepareRequest('https://duck.com'),
];

// Send asynchronously multiple requests at once
// Once all requests are completed, get their responses
$responses = $chc->sendMulti($requests);

// Iterate responses
foreach ($responses as $res) {
    /** @var \Webiik\CurlHttpClient\CurlHttpClientRes $res */
}

CurlHttpClientReq

CurlHttpClientReq 代表一系列 cURL 选项。它提供了许多方法来轻松添加最常见的 cURL 选项。

连接设置

url

url(string $url): CurlHttpClientReq

url() 设置要连接到的 URL。

$request->url('https://www.google.com');

method

method(string $method): CurlHttpClientReq

method() 设置连接方法,例如 GET、POST...

$request->method('POST');

port

port(int $port): CurlHttpClientReq

port() 设置要连接到的端口号。

$request->port('1212');

followLocation

followLocation(bool $follow, int $maxRedirs = -1, bool $autoReferrer = false): CurlHttpClientReq

followLocation() 设置是否跟随重定向。

$request->followLocation(true);

auth

auth(string $user, string $password, int $authMethod = CURLAUTH_ANY): CurlHttpClientReq

auth() 设置认证凭据。

$request->auth('user', 'password');

proxy

proxy(string $proxyUrl, string $user = '', string $password = '', int $authMethod = CURLAUTH_BASIC): CurlHttpClientReq

proxy() 设置要连接的代理。

$request->proxy('socks5://xxx.xxx.xxx.xxx', 'user', 'password');

verifySSL

verifySSL(bool $bool): CurlHttpClientReq

verifySSL() 设置是否检查 SSL 连接。

$request->verifySSL(false);

connectTimeout

connectTimeout(int $sec): CurlHttpClientReq

connectTimeout() 设置 cURL 连接超时。0 - 无限期等待。

$request->connectTimeout(1);

executionTimeout

executionTimeout(int $sec): CurlHttpClientReq

executionTimeout() 设置 cURL 传输超时。0 - 在传输期间永不退出。

$request->executionTimeout(1);

lowSpeedLimit

lowSpeedLimit(int $bytes, int $sec): CurlHttpClientReq

lowSpeedLimit() 如果 cURL 的速度小于 $bytes/sec,则在 $sec 秒后断开 cURL。

// Disconnect when cURL connection speed is lower than 128KB for 10 seconds
$request->lowSpeedLimit(1024 * 128, 10);

要发送的数据

userAgent

userAgent(string $agent): CurlHttpClientReq

userAgent() 设置用户代理 HTTP 头。

$request->userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15');

referrer

referrer(string $url): CurlHttpClientReq

referrer() 设置引用者 HTTP 头。

$request->referrer('https://www.google.com');

header

header(string $header): CurlHttpClientReq

header() 设置格式为例如 'Content-type: image/jpeg' 的 HTTP 头。

$request->header('Content-Type: image/jpeg');

headers

headers(array $headers): CurlHttpClientReq

headers() 设置格式为例如 ['Content-type: image/jpeg',...] 的 HTTP 头数组。

$request->header([
    'Content-Disposition: attachment; filename="cute-cat.jpg"',
    'Content-Type: image/jpeg',
]);

mimicAjax

mimicAjax(): CurlHttpClientReq

mimicAjax() 设置 HTTP 头以模拟 AJAX。

$request->mimicAjax();

cookie

cookie(string $name, string $val): CurlHttpClientReq

cookie() 设置 'Cookie' HTTP 头。

$request->cookie('cat', 'Tom');

cookieFile

cookieFile(string $path): CurlHttpClientReq

cookieFile() 设置从文件中的 cookie。

$request->cookieFile('cookies.txt');

cookieJar

cookieJar(string $path): CurlHttpClientReq

cookieJar() 将响应 cookie 捕获到文件。

$request->cookieJar('cookies.txt');

resetCookie

resetCookie(): CurlHttpClientReq

resetCookie() 设置 cURL 忽略所有以前的 cookie。

$request->resetCookie();

postData

postData(array $fields, array $curlFiles = []): CurlHttpClientReq

postData() 将数据添加到 cURL 请求。

$request->postData($_POST, $_FILES);

upload

upload(string $file, int $chunk = 8192): CurlHttpClientReq

upload() 设置 cURL 将本地文件上传到远程服务器。 $file 是要上传到远程服务器的本地文件。

// Set address to upload to
$request = $chc->prepareRequest('ftp://yourftp.tld');

// Set auth credentials (when required)
$request->auth('user', 'password');

// Set local file to upload
$request->upload('cute-cat.jpg');

// Init uploading
$chc->send($request);

uploadSpeedLimit

uploadSpeedLimit(int $bytesSec): CurlHttpClientReq

uploadSpeedLimit() 设置每秒最大上传速度的字节数。

// Limit upload speed to 1 MB/s
$request->uploadSpeedLimit(1024 * 1024);

要接收的数据

encoding

encoding(string $encoding): CurlHttpClientReq

encoding() 设置响应编码。支持的编码有 "identity"、"deflate" 和 "gzip"。

$request->encoding('deflate');

receiveBody

receiveBody(bool $bool): CurlHttpClientReq

receiveBody() 确定是否接收响应体。

$request->receiveBody(true);

receiveHeaders

receiveHeaders(bool $bool): CurlHttpClientReq

receiveHeaders() 确定是否接收响应头。

$request->receiveHeaders(true);

receiveAsString

receiveAsString(bool $bool): CurlHttpClientReq

receiveAsString() 设置 cURL 将 cURL 响应作为字符串返回,而不是直接输出。

$request->receiveAsString(true);

downloadToServer

downloadToServer(string $file, int $chunk = 8192): CurlHttpClientReq

downloadToServer() 将cURL设置为将远程文件下载到本地服务器。 $file用作远程文件的存储。

// Set remote file to download
$request = $chc->prepareRequest('https://domain.tld/cute-cat.jpg');

// Set local file to download to
$request->downloadToServer('cute-cat.jpg');

// Init downloading
$chc->send($request);

downloadToClient

downloadToClient(int $chunk = 8192): CurlHttpClientReq

downloadToClient() 将cURL设置为将远程文件流式传输到客户端。

// Set remote file to stream
$request = $chc->prepareRequest('https://domain.tld/cute-cat.jpg');

// Tell cURL to stream remote file to client
$request->downloadToClient();

// Set appropriate headers
header('Content-Disposition: attachment; filename="cute-cat.jpg"');
header('Content-Type: image/jpeg');

// Init streaming
$chc->send($request);

downloadSpeedLimit

downloadSpeedLimit(int $bytesSec): CurlHttpClientReq

downloadSpeedLimit() 设置每秒的字节数下载速度上限。

// Limit download speed to 1 MB/s
$request->downloadSpeedLimit(1024 * 1024);

自定义

verbose

verbose(bool $bool): CurlHttpClientReq

verbose() 将cURL设置为接收详细的响应信息。

$request->verbose(true);

curlOption

curlOption(int $option, $val): CurlHttpClientReq

curlOption() 设置cURL选项。

$request->curlOption(CURLOPT_TCP_NODELAY, 1);

curlOptions

curlOptions(array $options): CurlHttpClientReq

curlOptions() 设置一组cURL选项。

$request->curlOptions([
	CURLOPT_TCP_NODELAY => 1,
	CURLOPT_FORBID_REUSE => 1,
]);

progressFile

progressFile(string $uniqueName, string $dir): CurlHttpClientReq

progressFile() 设置用于存储下载/上传进度的文件。进度以JSON格式存储。

$request->progressFile('fu37icnj', __DIR__);

progressJson

progressJson(): CurlHttpClientReq

progressJson() 将cURL设置为以JSON格式(不包含内容类型头)打印上传/下载进度。

$request->progressJson();

CurlHttpClientRes

CurlHttpClientRes表示cURL响应。它提供方法以轻松访问大多数常见响应信息。

header

header(string $name, bool $sensitive = true, bool $raw = false)

header() 通过头名称获取响应头。

参数

  • name 头名称
  • sensitive 确定头名称是否区分大小写
  • raw 确定是否仅返回头值(false)或完整的头(true)
$header = $response->header('Content-Type');

headers

headers(): array

headers() 获取所有响应头的数组。

$headers = $response->headers();

cookie

cookie(string $name, bool $sensitive = true, bool $raw = false)

cookie() 通过cookie名称获取响应cookie值。

参数

  • name cookie名称
  • sensitive 确定cookie名称是否区分大小写
  • raw 确定是否仅返回cookie值(false)或完整的cookie头(true)
$cookie = $response->cookie('cat');

cookies

cookies(): array

cookies() 获取所有响应cookie头的数组。

$cookies = $response->cookies();

cookiesAssoc

cookiesAssoc(): array

cookiesAssoc() 获取所有响应cookie的关联数组。

$cookies = $response->cookiesAssoc();

body

body(): string

body() 获取响应体。

$body = $response->body();

size

size(): int

size() 获取响应的字节数。

$size = $response->size();

mime

mime(): string

mime() 获取响应的内容类型。

$mime = $response->mime();

statusCode

statusCode(): int

statusCode() 获取响应的HTTP状态码。

$httpStatusCode = $response->statusCode();
if ($httpStatusCode == 200) {
    // Remote page responded with HTTP status OK
}

errMessage

errMessage(): string

errMessage() 获取cURL错误信息。

$curlErrMessage = $response->errMessage();

errNum

errNum(): int

errNum() 获取cURL错误编号。

$curlErrNum = $response->errNum();
if (!$curlErrNum) {
    // Curl request is OK
}

isOk

isOk(): bool

isOk() 指示cURL请求是否成功。

if ($response->isOk()) {
    // Curl request is OK
}

info

info(): array

info() 获取cURL信息数组。

$curlInfo = $response->info();

requestHeaders

requestHeaders(): array

requestHeaders() 获取所有请求头的数组。

$requestHeaders = $response->requestHeaders();

requestCookies

requestCookies(): array

requestCookies() 获取所有请求cookie头的数组。

$requestCookies = $response->requestCookies();

资源