guzzle

Guzzle is HTTP for PHP

Guzzle is a PHP HTTP client & framework for building RESTful web service clients.

  • Provides all the power of cURL with a simple interface.
  • Built from the ground up with plugins in mind by utilizing filters and events.
  • Built using TDD and unit-tested with PHPUnit.
  • Truly take advantage of HTTP/1.1 with persistent connections and parallel requests.
  • Includes a custom node.js webserver to test your clients.

About

Guzzle is a game changer in the world of PHP HTTP clients. Guzzle allows you to truly reap the benefits of the HTTP/1.1 spec. No other library makes persistent connection management or sending requests in parallel easier.

In addition to taking the pain out of HTTP, Guzzle provides a lightweight framework for creating web service clients. Most web service clients follow a specific pattern: create a client class, create methods for each action, create and execute a cURL handle, parse the response, implement error handling, and return the result. Guzzle takes the redundancy out of this process and gives you the tools you need to quickly build a web service client.

Start truly consuming HTTP with Guzzle.

Installation

Just download the guzzle phar file and include it in your PHP scripts:

<?php
require_once '/path/to/guzzle.phar';
$client = new Guzzle\Service\Client('http://test.com/');
$response = $client->get('/resource.xml')->send();

You can also install guzzle using composer by creating a composer.json file in your project root:

{
  "require": {
    "guzzle/guzzle": ">=2.4.0"
  }
}

Read more about installing Guzzle


Features

  • Supports GET, HEAD, POST, DELETE, PUT, and OPTIONS
  • Allows full access to request and response headers
  • Persistent connections are implicitly managed by Guzzle, resulting in huge performance benefits
  • Send requests in parallel
  • Cookie sessions can be maintained between requests using the CookiePlugin
  • Allows custom entity bodies to be sent in PUT and POST requests, including sending data from a PHP stream
  • Responses can be cached and served from cache using the caching reverse proxy plugin
  • Failed requests can be retried using truncated exponential backoff
  • Entity bodies can be validated automatically using Content-MD5 headers
  • All data sent over the wire can be logged using the LogPlugin
  • Automatically requests compressed data and automatically decompresses data
  • Subject/Observer signal slot system for unobtrusively modifying request behavior
  • Supports all of the features of libcurl including authentication, redirects, SSL, proxies, etc
  • Web service client framework for building future-proof interfaces to web services

Integrate

Symfony2

GuzzleBundle for Symfony2

Silex

Guzzle Service Provider for Silex

HTTP basics

<?php
use Guzzle\Service\Client;

$client = new Client('http://www.example.com/api/v1/key/{key}', array(
    'key' => '***'
));

// Issue a path using a relative URL to the client's base URL
// Sends to http://www.example.com/api/v1/key/***/users
$request = $client->get('users');
$response = $request->send();

// Relative URL that overwrites the path of the base URL
$request = $client->get('/test/123.php?a=b');

// Issue a head request on the base URL
$response = $client->head()->send();
$response = $client->delete('users/123')->send();

// Send a PUT request with custom headers
$response = $client->put('upload/text', array(
    'X-Header' => 'My Header'
), 'body of the request')->send();

// Send a PUT request using the contents of a PHP stream as the body
// Send using an absolute URL (overrides the base URL)
$response = $client->put('http://www.example.com/upload', array(
    'X-Header' => 'My Header'
), fopen('http://www.test.com/', 'r'));

// Create a POST request with a file upload (notice the @ symbol):
$request = $client->post('http://localhost:8983/solr/update', null, array (
    'custom_field' => 'my value',
    'file' => '@/path/to/documents.xml'
));

// Create a POST request and add the POST files manually
$request = $client->post('http://localhost:8983/solr/update')
    ->addPostFiles(array(
        'file' => '/path/to/documents.xml'
    ));

// Responses are objects
echo $response->getStatusCode() . ' ' . $response->getReasonPhrase() . "\n";
// Requests and responses can be cast to a string to show the raw HTTP message
echo $request . "\n\n" . $response;