RemoteHttpKernel
The RemoteHttpKernel is provided as an alternative to the standard HttpKernel in Symfony. Rather than using the
local application, it processes the Request object via cURL, parsing the results into a proper Response object., (*1)
Symfony Installation
First, checkout a copy of the code. Just add the following to the deps
file of your Symfony Standard Distribution:, (*2)
[ZeroemCurlBundle]
git=git://github.com/zeroem/ZeroemCurlBundle.git
target=/bundles/Zeroem/CurlBundle/
Then add the bundle to your AppKernel and register the namespace with the autoloader:, (*3)
// app/AppKernel.php
$bundles = array(
// ...
new Zeroem\CurlBundle\ZeroemCurlBundle(),
// ...
);
// app/autoload.php
$loader->registerNamespaces(array(
// ...
'Zeroem' => __DIR__.'/../vendor/bundles'
// ...
));
Now use the vendors
script to clone the newly added repository into your project:, (*4)
php bin/vendors install
Composer Installation
Add zeroem/curl-bundle
to your composer.json file:, (*5)
{
...
"require": {
...
"zeroem/curl-bundle": ""
...
}
...
}
And include the composer autoloader:, (*6)
require("./vendor/.composer/autoload.php");
Features
RemoteHttpKernel
The RemoteHttpKernel
provides the bridge between the the standard Request/Response architecture
used by Symfony and the cURL library., (*7)
use Symfony\Component\HttpFoundation\Request;
use Zeroem\CurlBundle\HttpKernel\RemoteHttpKernel;
$request = Request::create("http://www.symfony.com");
$remoteKernel = new RemoteHttpKernel();
$response = $remoteKernel->handle($request);
Caveats
Due to the way the HttpFoundation\Request object generates the Request Uri, any changes made
to Request::$query will not be reflected when the cURL request is made. I'm currently looking for
a proper solution to this issue., (*8)
RequestGenerator
The RequestGenerator
simplifies building multiple, similar cURL Request Objects., (*9)
use Zeroem\CurlBundle\Curl\RequestGenerator;
$generator = new RequestGenerator(array(CURLOPT_RETURNTRANSFER=>true));
// Automatically has CURLOPT_RETURNTRANSFER set to true
$request = $generator->getRequest();
Goals
Provide a clean, Object Oriented solution for interacting with remote HTTP services that doesn't require
knowing the ins and outs of all the various cURL api options nor invents it's own HTTP Request/Response
architecture., (*10)
Motivation
I was originally looking for a Symfony Bundle that provided an OO interface to the curl_* functions. Along the
way, I realized that I didn't actually want a cURL wrapper, I wanted something that could execute HTTP requests
and return the result in a meaningful way. So I decided to use the existing Symfony components and build a
custom HttpKernelInterprovided, relegating cURL to an implementation detail rather than the purpose of the
project., (*11)