A minimalistic http/curl request interface library
GPL-2.0 License
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 the HttpRequest
CachedCurlRequest
to support low-level caching on repeated CurlRequest
requestsMultiCurlRequest
to make use of the cURL multi stack featureSocketRequest
to create asynchronous socket connectionsThe recommended installation method for this library is by adding the dependency to your composer.json.
{
"require": {
"onoi/http-request": "~1.3"
}
}
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 please subscribe to the developers mailing list and have a look at the contribution guidelinee. 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 continues integration platform. Tests can also be executed manually using the PHPUnit configuration file found in the root directory.
SocketRequest
to match a possible TLS portCachedCurlRequest::setCachePrefix
and CachedCurlRequest::setExpiryInSeconds
in favor of setting it via the optionONOI_HTTP_REQUEST_RESPONSECACHE_PREFIX
and ONOI_HTTP_REQUEST_RESPONSECACHE_TTL
(any change in the expiry will auto-invalidate existing items in cache)CachedCurlRequest::isCached
in favor of CachedCurlRequest::isFromCache
SocketRequest
response outputONOI_HTTP_REQUEST_FOLLOWLOCATION
to support resetting the URL location in case of a 301
HTTP response during a SocketRequest::ping
requestAsyncCurlRequest
to MultiCurlRequest
MultiCurlRequest::setCallback
and to be replaced by MultiCurlRequest::setOption( ONOI_HTTP_REQUEST_ON_COMPLETED_CALLBACK, ... )
SocketRequest
to create asynchronous socket connectionsHttpRequest
interfaceCurlRequest
implementationCachedCurlRequest
to extend the CurlRequest
implementationAsyncCurlRequest
implementation