zeroem/curl-bundle

Allows you to easily create and execute HTTP Requests with cURL

Installs: 23 439

Dependents: 0

Suggesters: 1

Security: 0

Stars: 13

Watchers: 3

Forks: 12

Open Issues: 4

Type:symfony-bundle

v1.3 2014-07-17 19:25 UTC

This package is not auto-updated.

Last update: 2024-10-26 12:03:21 UTC


README

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.

Symfony Installation

First, checkout a copy of the code. Just add the following to the deps file of your Symfony Standard Distribution:

[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:

    // 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:

    php bin/vendors install

Composer Installation

Add zeroem/curl-bundle to your composer.json file:

{
   ...
   "require": {
   ...
       "zeroem/curl-bundle": ""
   ...
   }
...
}

And include the composer autoloader:

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.

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.

RequestGenerator

The RequestGenerator simplifies building multiple, similar cURL Request Objects.

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.

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.