sfWebBrowserPlugin - 0.9.5

Standalone HTTP client

You are currently browsing
the website for symfony 1

Visit the Symfony2 website


« Back to the Plugins Home

Signin


Forgot your password?
Create an account

Tools

Stats

advanced search
Information Readme Releases Changelog Contribute
Show source | Show as Markdown

sfWebBrowser plugin

The sfWebBrowserPlugin proposes an HTTP client capable of making web requests. The interface is similar to that of sfTestBrowser.

Possible uses

  • Querying a Web service
  • Monitoring a Website
  • Mashup of content from several websites
  • Aggregation of RSS feeds
  • Proxy to another server
  • Cross-domain AJAX interactions
  • API to foreign websites
  • ...

Contents

This plugin contains three classes: sfWebBrowser, sfFopenAdapter, andsfCurlAdapter. Unit tests are available in the SVN repository, to be placed in a symfony application's test/ directory.

Features

The sfWebBrowser class makes web requests based on a URI:

$b = new sfWebBrowser();
$b->get('http://www.example.com/');
$res = $b->getResponseText();

The usual methods of the sfTestBrowser also work there, with the fluid interface.

// Inline
$b->get('http://www.example.com/')->get('http://www.google.com/')->back()->reload();
// More readable
$b->get('http://www.example.com/')

  *>get('http://www.google.com/')

  *>back()

  *>reload();

The browser accepts absolute and relative URIs

$b->get('http://www.example.com/test.html');
$b->get('test.html');

The get() method accepts parameters either as a query string, or as an array.

$b->get('http://www.example.com/test.php?foo=bar');
$b->get('http://www.example.com/test.php', array('foo', 'bar'));

POST, PUT and DELETE requests are also supported.

$b->post('http://www.example.com/test.php', array('foo', 'bar'));
$b->put('http://www.example.com/test.php', array('foo', 'bar'));
$b->delete('http://www.example.com/test.php', array('foo', 'bar'));

You can access the response in various formats, at your convenience:

$myString         = $b->getResponseText();
$myString         = $b->getResponseBody(); // drop the <head> part
$myDomDocument    = $b->getResponseDom();
$myDomCssSelector = $b->getResponseDomCssSelector();
$mySimpleXml      = $b->getResponseXml();

You can also interact with the response with the setFields() and click() methods.

$b->get('http://www.example.com/login')

  *>setField('user', 'foobar')

  *>setField('password', 'barbaz')

  *>click('submit');

The browser supports HTTP and HTTPS requests, proxies, redirects, and timeouts.

Gzip and deflate content-encoded response bodies are also supported, provided that you have the zlib extention enabled.

The default page-fetching method uses [fopen()]. However, you can use http://php.net/curl Curl if you prefer:

$b = new sfWebBrowser(array(), 'sfCurlAdapter');
// use $b in the same way as the examples above

To use Curl, make sure it is enabled in your php.ini file.

Installation

  • Install the plugin

    $ symfony plugin-install http://plugins.symfony-project.com/sfWebBrowserPlugin

  • Clear the cache to enable the autoloading to find the new class

    $ symfony cc

Known limitations

The web request is made via fopen(), so this will only work if PHP is compiled with sockets support and if allow_url_fopen is defined to true in the php.ini.

Cookies are not handled yet.

Caching is not supported yet.

Changelog

2007-02-21 | 0.9.5 Beta

  • bmeynell: fixed bug with relative uri's attempting to use a port other than 80 (sfWebBrowser, 132 - 146)
  • bmeynell: fixed small bug not printing hostname on exception (sfFopenAdapter, 61-62)
  • bmeynell: created sfCurlAdapter and passes all unit tests
  • bmeynell: removed '$changeStack = true' from call() prototype in sfCurlAdapter, sfFopenAdapter, and moved changestack check to sfWebBrowser
  • bmeynell: added $askeet_url to sfWebBrowserTest
  • bmeynell: added easy toggling between adapters in sfWebBrowserTest
  • tristan: added put() and delete() public methods
  • tristan: added unit tests to validate request HTTP method

2007-02-16 | 0.9.4 Beta

  • francois: refactored the browser to make it multi-adapter
  • francois: BC break constructor signature changed : new sfWebBrowser(array $headers, string $adapter_class, array $adapter_options)
  • francois: fixed notice when trying to retrieve inexistent header
  • francois: fixed header case normalization
  • francois: transformed setResponseXXX() methods to public
  • francois: fixed caps in initializeRequestHeaders()
  • francois: fixed unit test #40

2007-02-16 | 0.9.3 Beta

  • tristan: Added support for gzip and deflate.
  • tristan: Possibility to pass default request headers to sfWebBrowser's constructor
  • tristan: "Accept-Encoding" header is automatically set depending on PHP capabilities
  • tristan: Fixed problems with request and response headers case
  • tristan: Renamed "browser options" to "adapter options" (http://www.symfony-project.com/forum/index.php/m/21635/)
  • tristan: BC break constructor signature changed : new sfWebBrowser(array $headers, array $adapter_options)
  • tristan: Unit tested POST requests
  • tristan: Changed way httpd headers are stored internally
  • tristan: Fixed small bug in getResponseBody()
  • francois: Fixed unit test for malformed headers

2007-02-09 | 0.9.2 Beta

  • francois: Fixed notice with getResponseXML()

2007-02-08 | 0.9.1 Beta

  • francois: Fixed notice with some headers
  • francois: Added license and copyright

2007-02-08 | 0.9.0 Beta

  • francois: Initial release