+++ /dev/null
-
-A Beginners Tutorial
---------------------
-$Revision$
-
-
-- GET Queries
-
- The HttpRequest class can be used to execute any HTTP request method.
- The following example shows a simple GET request where a few query
- parameters are supplied. Additionally potential cookies will be
- read from and written to a file.
-
-<?php
-$r = new HttpRequest('http://www.google.com/search');
-
-// store Googles cookies in a dedicated file
-touch('google.txt');
-$r->setOptions(
- array( 'cookiestore' => 'google.txt',
- )
-);
-
-$r->setQueryData(
- array( 'q' => '+"pecl_http" -msg -cvs -list',
- 'hl' => 'de'
- )
-);
-
-// HttpRequest::send() returns an HttpMessage object
-// of type HttpMessage::TYPE_RESPONSE or throws an exception
-try {
- print $r->send()->getBody();
-} catch (HttpException $e) {
- print $e;
-}
-?>
-
-- Multipart Posts
-
- The following example shows an multipart POST request, with two form
- fields and an image that's supposed to be uploaded to the server.
- It's a bad habit as well as common practice to issue a redirect after
- an received POST request, so we'll allow a redirect by enabling the
- redirect option.
-
-<?php
-$r = new HttpRequest('http://dev.iworks.at/.print_request.php', HTTP_METH_POST);
-
-// if redirects is set to true, a single redirect is allowed;
-// one can set any reasonable count of allowed redirects
-$r->setOptions(
- array( 'cookies' => array('MyCookie' => 'has a value'),
- 'redirect' => true,
- )
-);
-
-// common form data
-$r->setPostFields(
- array( 'name' => 'Mike',
- 'mail' => 'mike@php.net',
- )
-);
-// add the file to post (form name, file name, file type)
-touch('profile.jpg');
-$r->addPostFile('image', 'profile.jpg', 'image/jpeg');
-
-try {
- print $r->send()->getBody();
-} catch (HttpException $e) {
- print $e;
-}
-?>
-
-- Parallel Requests
-
- It's possible to execute several HttpRequests in parallel with the
- HttpRequestPool class. HttpRequests to send, do not need to perform
- the same request method, but can only be attached to one HttpRequestPool
- at the same time.
-
-<?php
-try {
- $p = new HttpRequestPool;
- // if you want to set _any_ options of the HttpRequest object,
- // you need to do so *prior attaching* to the request pool!
- $p->attach(new HttpRequest('http://pear.php.net', HTTP_METH_HEAD));
- $p->attach(new HttpRequest('http://pecl.php.net', HTTP_METH_HEAD));
-} catch (HttpException $e) {
- print $e;
- exit;
-}
-
-try {
- $p->send();
- // HttpRequestPool implements an iterator over attached HttpRequest objects
- foreach ($p as $r) {
- echo "Checking ", $r->getUrl(), " reported ", $r->getResponseCode(), "\n";
- }
-} catch (HttpException $e) {
- print $e;
-}
-?>
-
-- Parallel Requests?
-
- You can use a more advanced approach by using the protected interface of
- the HttpRequestPool class. This allows you to perform some other tasks
- while the requests are executed.
-
-<?php
-class Pool extends HttpRequestPool
-{
- public function __construct()
- {
- parent::__construct(
- new HttpRequest('http://pear.php.net', HTTP_METH_HEAD),
- new HttpRequest('http://pecl.php.net', HTTP_METH_HEAD)
- );
-
- // HttpRequestPool methods socketPerform() and socketSelect() are
- // protected; one could use this approach to do something else
- // while the requests are being executed
- print "Executing requests";
- for ($i = 0; $this->socketPerform(); $i++) {
- $i % 10 or print ".";
- if (!$this->socketSelect()) {
- throw new HttpException("Socket error!");
- }
- }
- print "\nDone!\n";
- }
-}
-
-try {
- foreach (new Pool as $r) {
- echo "Checking ", $r->getUrl(), " reported ", $r->getResponseCode(), "\n";
- }
-} catch (HttpException $ex) {
- print $e;
-}
-?>
-
-- Cached Responses
-
- One of the main key features of HttpResponse is HTTP caching. HttpResponse
- will calculate an ETag based on the http.etag_mode INI setting as well as
- it will determine the last modification time of the sent entity. It uses
- those two indicators to decide if the cache entry on the client side is
- still valid and will emit an "304 Not Modified" response if applicable.
-
-<?php
-HttpResponse::setCacheControl('public');
-HttpResponse::setCache(true);
-HttpResponse::capture();
-
-print "This will be cached until content changes!\n";
-print "Note that this approach will only save the clients download time.\n";
-?>
-
-- Bandwidth Throttling
-
- HttpResponse supports a basic throttling mechanism, which is enabled by
- setting a throttle delay and a buffer size. PHP will sleep the specified
- amount of seconds after each sent chunk of specified bytes.
-
-<?php
-// send 5000 bytes every 0.2 seconds, i.e. max ~25kByte/s
-HttpResponse::setThrottleDelay(0.2);
-HttpResponse::setBufferSize(5000);
-HttpResponse::setCache(true);
-HttpResponse::setContentType('application/x-zip');
-HttpResponse::setFile('../archive.zip');
-HttpResponse::send();
-?>