Added KH 3.3.0
This commit is contained in:
121
includes/kohana/system/classes/Kohana/Request/Client/HTTP.php
Normal file
121
includes/kohana/system/classes/Kohana/Request/Client/HTTP.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php defined('SYSPATH') OR die('No direct script access.');
|
||||
/**
|
||||
* [Request_Client_External] HTTP driver performs external requests using the
|
||||
* php-http extention. To use this driver, ensure the following is completed
|
||||
* before executing an external request- ideally in the application bootstrap.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* // In application bootstrap
|
||||
* Request_Client_External::$client = 'Request_Client_HTTP';
|
||||
*
|
||||
* @package Kohana
|
||||
* @category Base
|
||||
* @author Kohana Team
|
||||
* @copyright (c) 2008-2012 Kohana Team
|
||||
* @license http://kohanaframework.org/license
|
||||
* @uses [PECL HTTP](http://php.net/manual/en/book.http.php)
|
||||
*/
|
||||
class Kohana_Request_Client_HTTP extends Request_Client_External {
|
||||
|
||||
/**
|
||||
* Creates a new `Request_Client` object,
|
||||
* allows for dependency injection.
|
||||
*
|
||||
* @param array $params Params
|
||||
* @throws Request_Exception
|
||||
*/
|
||||
public function __construct(array $params = array())
|
||||
{
|
||||
// Check that PECL HTTP supports requests
|
||||
if ( ! http_support(HTTP_SUPPORT_REQUESTS))
|
||||
{
|
||||
throw new Request_Exception('Need HTTP request support!');
|
||||
}
|
||||
|
||||
// Carry on
|
||||
parent::__construct($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* @var array curl options
|
||||
* @link http://www.php.net/manual/function.curl-setopt
|
||||
*/
|
||||
protected $_options = array();
|
||||
|
||||
/**
|
||||
* Sends the HTTP message [Request] to a remote server and processes
|
||||
* the response.
|
||||
*
|
||||
* @param Request $request request to send
|
||||
* @param Response $request response to send
|
||||
* @return Response
|
||||
*/
|
||||
public function _send_message(Request $request, Response $response)
|
||||
{
|
||||
$http_method_mapping = array(
|
||||
HTTP_Request::GET => HTTPRequest::METH_GET,
|
||||
HTTP_Request::HEAD => HTTPRequest::METH_HEAD,
|
||||
HTTP_Request::POST => HTTPRequest::METH_POST,
|
||||
HTTP_Request::PUT => HTTPRequest::METH_PUT,
|
||||
HTTP_Request::DELETE => HTTPRequest::METH_DELETE,
|
||||
HTTP_Request::OPTIONS => HTTPRequest::METH_OPTIONS,
|
||||
HTTP_Request::TRACE => HTTPRequest::METH_TRACE,
|
||||
HTTP_Request::CONNECT => HTTPRequest::METH_CONNECT,
|
||||
);
|
||||
|
||||
// Create an http request object
|
||||
$http_request = new HTTPRequest($request->uri(), $http_method_mapping[$request->method()]);
|
||||
|
||||
if ($this->_options)
|
||||
{
|
||||
// Set custom options
|
||||
$http_request->setOptions($this->_options);
|
||||
}
|
||||
|
||||
// Set headers
|
||||
$http_request->setHeaders($request->headers()->getArrayCopy());
|
||||
|
||||
// Set cookies
|
||||
$http_request->setCookies($request->cookie());
|
||||
|
||||
// Set query data (?foo=bar&bar=foo)
|
||||
$http_request->setQueryData($request->query());
|
||||
|
||||
// Set the body
|
||||
if ($request->method() == HTTP_Request::PUT)
|
||||
{
|
||||
$http_request->addPutData($request->body());
|
||||
}
|
||||
else
|
||||
{
|
||||
$http_request->setBody($request->body());
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$http_request->send();
|
||||
}
|
||||
catch (HTTPRequestException $e)
|
||||
{
|
||||
throw new Request_Exception($e->getMessage());
|
||||
}
|
||||
catch (HTTPMalformedHeaderException $e)
|
||||
{
|
||||
throw new Request_Exception($e->getMessage());
|
||||
}
|
||||
catch (HTTPEncodingException $e)
|
||||
{
|
||||
throw new Request_Exception($e->getMessage());
|
||||
}
|
||||
|
||||
// Build the response
|
||||
$response->status($http_request->getResponseCode())
|
||||
->headers($http_request->getResponseHeader())
|
||||
->cookie($http_request->getResponseCookies())
|
||||
->body($http_request->getResponseBody());
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
} // End Kohana_Request_Client_HTTP
|
Reference in New Issue
Block a user