webiik / curlhttpclient
CurlHttpClient 允许轻松通过 cURL 发送 HTTP 请求。
Requires
- php: >=7.2
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();