mediawiki / http-request
一个极简的 http/curl 请求接口库
2.0.0
2022-12-13 13:16 UTC
Requires
- php: >=8.0
- onoi/cache: ~1.2
Requires (Dev)
- phpunit/phpunit: ^9.5
Suggests
- lib-curl: Allows making CURL requests
Replaces
README
一个极简的 http/curl 请求接口,曾是 Semantic MediaWiki 代码库的一部分,现在作为独立的库部署。
此库提供
HttpRequest
接口CurlRequest
作为HttpRequest
的 cURL 实现CachedCurlRequest
以支持重复CurlRequest
请求的低级别缓存MultiCurlRequest
以利用 cURL 多栈功能SocketRequest
以创建异步套接字连接
需求
- PHP 8.0 或更高版本
安装
此库的推荐安装方法是将其依赖项添加到您的 composer.json 文件中。
{ "require": { "mediawiki/http-request": "~2.0" } }
用法
use Onoi\HttpRequest\CurlRequest; use Onoi\HttpRequest\Exception\BadHttpResponseException; use Onoi\HttpRequest\Exception\HttpConnectionException; class Foo { private $curlRequest = null; public function __constructor( CurlRequest $curlRequest ) { $this->curlRequest = $curlRequest; } public function doMakeHttpRequestTo( $url ) { $this->curlRequest->setOption( CURLOPT_URL, $url ); if ( !$this->curlRequest->ping() ) { throw new HttpConnectionException( "Couldn't connect" ); } $this->curlRequest->setOption( CURLOPT_RETURNTRANSFER, true ); $this->curlRequest->setOption( CURLOPT_HTTPHEADER, array( 'Accept: application/x-turtle' ) ); $response = $this->curlRequest->execute(); if ( $this->curlRequest->getLastErrorCode() == 0 ) { return $response; } throw new BadHttpResponseException( $this->curlRequest ); } }
$httpRequestFactory = new HttpRequestFactory(); $instance = new Foo( $httpRequestFactory->newCurlRequest() ); $response = $instance->doMakeHttpRequestTo( 'http://example.org' ); OR $cacheFactory = new CacheFactory(); $compositeCache = $cacheFactory->newCompositeCache( array( $cacheFactory->newFixedInMemoryLruCache( 500 ), $cacheFactory->newDoctrineCache( new \Doctrine\Common\Cache\RedisCache() ) ) ); $httpRequestFactory = new HttpRequestFactory( $compositeCache ); $cachedCurlRequest = $httpRequestFactory->newCachedCurlRequest(); // Responses for a request with the same signature (== same endpoint and same query // content) will be cached if the request was successful for a specified 1 h (3600 sec) $cachedCurlRequest->setOption( ONOI_HTTP_REQUEST_RESPONSECACHE_TTL, 60 * 60 ); $instance = new Foo( $cachedCurlRequest ); $response = $instance->doMakeHttpRequestTo( 'http://example.org' );
贡献和支持
如果您想为此项目做出贡献,您可以
过去做出贡献的人名单可以在这里找到。
测试
该库提供单元测试,覆盖通常由 持续集成平台 运行的核心功能。测试还可以使用根目录中找到的 PHPUnit 配置文件手动执行。
发行说明
2.0.0 (2022-12-13)
- 将最低 PHP 要求提高到 8.0
1.3.1 (2017-01-14)
- 扩展
SocketRequest
以匹配可能的 TLS 端口
1.3.0 (2015-11-23)
- 已弃用
CachedCurlRequest::setCachePrefix
和CachedCurlRequest::setExpiryInSeconds
,并建议使用选项ONOI_HTTP_REQUEST_RESPONSECACHE_PREFIX
和ONOI_HTTP_REQUEST_RESPONSECACHE_TTL
设置它(任何过期更改将自动使现有缓存项无效) - 已弃用
CachedCurlRequest::isCached
,并建议使用CachedCurlRequest::isFromCache
1.2.0 (2015-11-09)
- 向
SocketRequest
响应输出添加了 "wasAccepted" - 添加了选项
ONOI_HTTP_REQUEST_FOLLOWLOCATION
以支持在SocketRequest::ping
请求期间出现301
HTTP 响应时重置 URL 位置
1.1.0 (2015-09-12)
- 将
AsyncCurlRequest
重命名为MultiCurlRequest
- 已弃用
MultiCurlRequest::setCallback
,并将其替换为MultiCurlRequest::setOption( ONOI_HTTP_REQUEST_ON_COMPLETED_CALLBACK, ... )
- 添加了
SocketRequest
以创建异步套接字连接
1.0.0 (2015-07-22, 首次发布)
- 添加了
HttpRequest
接口 - 添加了
CurlRequest
实现 - 添加了
CachedCurlRequest
以扩展CurlRequest
实现 - 添加了
AsyncCurlRequest
实现