solcloud/curl

围绕cURL的简单封装

v1.2.0 2022-02-24 16:11 UTC

This package is auto-updated.

Last update: 2024-09-24 21:59:57 UTC


README

轻松进行HTTP请求。

用法

只需使用setter设置Request对象,并将其传递给CurlRequest

use Solcloud\Curl\CurlRequest;
use Solcloud\Http\Request;

$curl = new CurlRequest();
$request = new Request();
$request
    ->setUrl('https://www.google.com/')
    ->setConnectionTimeoutSec(1)
    ->setRequestTimeoutSec(2)
    ->setHeaders([
        'X-header: x-value',
    ])
    ->setReferer('about:blank')
    ->setUserAgent('solcloud-curl')
;
$response = $curl->fetchResponse($request);

echo "GOT {$response->getStatusCode()}: {$response->getRealUrl()}" . PHP_EOL;
echo substr($response->getBody(), 0, 30) . '...' . PHP_EOL;
print_r($response->getLastHeaders());

完整示例请见example.php

接口

CurlRequest实现了来自solcloud/http包的\Solcloud\Http\Contract\IRequestDownloader接口

public function fetchResponse(Request $request): Response;

除了CurlRequest之外,还有FileResponseStringResponse的实现,便于轻松进行模拟缓存

/** @var \Solcloud\Http\Contract\IRequestDownloader $downloader  */
$downloader = new \Solcloud\Curl\FileResponse('/tmp/response.html');
$downloader->fetchResponse($request) // curl not needed

您还可以使用第二个构造函数参数$modifyResponseCallback来实现更复杂的行为。

use Solcloud\Curl\FileResponse;
use Solcloud\Http\Request;
use Solcloud\Http\Response;

$downloader = new FileResponse('/tmp/response.html', function (Request $request, Response $response): void {
    if ($request->getUrl() === 'badssl') {
        throw new \Solcloud\Curl\Exception\Specific\SSLException('SSL error');
    }
    if (rand(0, 1) === 0) {
        throw new \Solcloud\Http\Exception\ResponseException('Response error');
    }
    $response->setBody($response->getBody() . ' - modified');
});
$downloader->fetchResponse($request);