mediawiki / http-request
A minimalistic http/curl request interface library
Fund package maintenance!
Open Collective
www.semantic-mediawiki.org/wiki/Sponsorship
Installs: 75 569
Dependents: 2
Suggesters: 0
Security: 0
Stars: 0
Watchers: 10
Forks: 0
Open Issues: 0
Requires
- php: >=8.0
- onoi/cache: ~1.2
Requires (Dev)
- phpunit/phpunit: ^9.5
Suggests
- lib-curl: Allows making CURL requests
Replaces
README
A minimalistic http/curl request interface that was part of the Semantic MediaWiki code base and is now being deployed as independent library.
This library provides:
HttpRequest
interfaceCurlRequest
as cURL implementation of theHttpRequest
CachedCurlRequest
to support low-level caching on repeatedCurlRequest
requestsMultiCurlRequest
to make use of the cURL multi stack featureSocketRequest
to create asynchronous socket connections
Requirements
- PHP 8.0 or later
Installation
The recommended installation method for this library is by adding the dependency to your composer.json.
{ "require": { "mediawiki/http-request": "~2.0" } }
Usage
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' );
Contribution and support
If you want to contribute work to the project you can:
A list of people who have made contributions in the past can be found here.
Tests
The library provides unit tests that covers the core-functionality normally run by the continuous integration platform. Tests can also be executed manually using the PHPUnit configuration file found in the root directory.
Release notes
2.0.0 (2022-12-13)
- Increased minimum PHP requirement to 8.0
1.3.1 (2017-01-14)
- Extended
SocketRequest
to match a possible TLS port
1.3.0 (2015-11-23)
- Deprecated
CachedCurlRequest::setCachePrefix
andCachedCurlRequest::setExpiryInSeconds
in favor of setting it via the optionONOI_HTTP_REQUEST_RESPONSECACHE_PREFIX
andONOI_HTTP_REQUEST_RESPONSECACHE_TTL
(any change in the expiry will auto-invalidate existing items in cache) - Deprecated
CachedCurlRequest::isCached
in favor ofCachedCurlRequest::isFromCache
1.2.0 (2015-11-09)
- Added "wasAccepted" to the
SocketRequest
response output - Added option
ONOI_HTTP_REQUEST_FOLLOWLOCATION
to support resetting the URL location in case of a301
HTTP response during aSocketRequest::ping
request
1.1.0 (2015-09-12)
- Renamed
AsyncCurlRequest
toMultiCurlRequest
- Deprecated
MultiCurlRequest::setCallback
and to be replaced byMultiCurlRequest::setOption( ONOI_HTTP_REQUEST_ON_COMPLETED_CALLBACK, ... )
- Added
SocketRequest
to create asynchronous socket connections
1.0.0 (2015-07-22, initial release)
- Added the
HttpRequest
interface - Added the
CurlRequest
implementation - Added the
CachedCurlRequest
to extend theCurlRequest
implementation - Added the
AsyncCurlRequest
implementation