);
// HttpRequest::send() returns an HttpMessage object
-// of type HttpMessage::RESPONSE or throws an exception
+// of type HttpMessage::TYPE_RESPONSE or throws an exception
try {
print $r->send()->getBody();
} catch (HttpException $e) {
)
);
// add the file to post (form name, file name, file type)
+touch('profile.jpg');
$r->addPostFile('image', 'profile.jpg', 'image/jpeg');
try {
HttpResponse::setFile('../archive.zip');
HttpResponse::send();
?>
-
-Exemplar Use Cases
-------------------
-
-- KISS XMLRPC Client
-
-<?php
-class XmlRpcClient
-{
- public $namespace;
- protected $request;
-
- public function __construct($url, $namespace = '')
- {
- $this->namespace = $namespace;
- $this->request = new HttpRequest($url, HTTP_METH_POST);
- $this->request->setContentType('text/xml');
- }
-
- public function setOptions($options = array())
- {
- return $this->request->setOptions($options);
- }
-
- public function addOptions($options)
- {
- return $this->request->addOptions($options);
- }
-
- public function __call($method, $params)
- {
- if ($this->namespace) {
- $method = $this->namespace .'.'. $method;
- }
- $this->request->setRawPostData(xmlrpc_encode_request($method, $params));
- $response = $this->request->send();
- if ($response->getResponseCode() != 200) {
- throw new Exception($response->getBody(), $response->getResponseCode());
- }
- return xmlrpc_decode($response->getBody(), 'utf-8');
- }
-
- public function getHistory()
- {
- return $this->request->getHistory();
- }
-}
-
-?>
-
-- Simple Feed Aggregator
-
-<?php
-class FeedAggregator
-{
- public $directory;
- protected $feeds = array();
-
- public function __construct($directory = 'feeds')
- {
- $this->setDirectory($directory);
- }
-
- public function setDirectory($directory)
- {
- $this->directory = $directory;
- foreach (glob($this->directory .'/*.xml') as $feed) {
- $this->feeds[basename($feed, '.xml')] = filemtime($feed);
- }
- }
-
- public function url2name($url)
- {
- return preg_replace('/[^\w\.-]+/', '_', $url);
- }
-
- public function hasFeed($url)
- {
- return isset($this->feeds[$this->url2name($url)]);
- }
-
- public function addFeed($url)
- {
- $r = $this->setupRequest($url);
- $r->send();
- $this->handleResponse($r);
- }
-
- public function addFeeds($urls)
- {
- $pool = new HttpRequestPool;
- foreach ($urls as $url) {
- $pool->attach($r = $this->setupRequest($url));
- }
- $pool->send();
-
- foreach ($pool as $request) {
- $this->handleResponse($request);
- }
- }
-
- public function getFeed($url)
- {
- $this->addFeed($url);
- return $this->loadFeed($this->url2name($url));
- }
-
- public function getFeeds($urls)
- {
- $feeds = array();
- $this->addFeeds($urls);
- foreach ($urls as $url) {
- $feeds[] = $this->loadFeed($this->url2name($url));
- }
- return $feeds;
- }
-
- protected function saveFeed($file, $contents)
- {
- if (file_put_contents($this->directory .'/'. $file .'.xml', $contents)) {
- $this->feeds[$file] = time();
- } else {
- throw new Exception("Could not save feed contents to $file.xml");
- }
- }
-
- protected function loadFeed($file)
- {
- if (isset($this->feeds[$file])) {
- if ($data = file_get_contents($this->directory .'/'. $file .'.xml')) {
- return $data;
- } else {
- throw new Exception("Could not load feed contents from $file.xml");
- }
- } else {
- throw new Exception("Unknown feed/file $file.xml");
- }
- }
-
- protected function setupRequest($url)
- {
- $r = new HttpRequest($url);
- $r->setOptions(array('redirect' => true));
-
- $file = $this->url2name($url);
-
- if (isset($this->feeds[$file])) {
- $r->setOptions(array('lastmodified' => $this->feeds[$file]));
- }
-
- return $r;
- }
-
- protected function handleResponse(HttpRequest $r)
- {
- if ($r->getResponseCode() != 304) {
- if ($r->getResponseCode() != 200) {
- throw new Exception("Unexpected response code ". $r->getResponseCode());
- }
- if (!strlen($body = $r->getResponseBody())) {
- throw new Exception("Received empty feed from ". $r->getUrl());
- }
- $this->saveFeed($this->url2name($r->getUrl()), $body);
- }
- }
-}
-?>
-
-