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
- PHP 8.0 or later
The recommended installation method for this library is by adding the dependency to your 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' );
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.
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.
- Increased minimum PHP requirement to 8.0
- Extended
SocketRequest
to match a possible TLS port
- 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
- 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
- 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
- Added the
HttpRequest
interface - Added the
CurlRequest
implementation - Added the
CachedCurlRequest
to extend theCurlRequest
implementation - Added the
AsyncCurlRequest
implementation