solcloud / curl
围绕cURL的简单封装
v1.2.0
2022-02-24 16:11 UTC
Requires
- php: >= 7.1
- solcloud/http: ^1.1
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
之外,还有FileResponse
和StringResponse
的实现,便于轻松进行模拟或缓存。
/** @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);