Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Jan Schneider <jan@horde.org>
- Loading branch information
Showing
6 changed files
with
264 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
<?php | ||
/** | ||
* Copyright 2007-2014 Horde LLC (http://www.horde.org/) | ||
* | ||
* @author Michael Cramer <michael@bigmichi1.de> | ||
* @license http://www.horde.org/licenses/bsd BSD | ||
* @category Horde | ||
* @package Http | ||
*/ | ||
|
||
/** | ||
* @author Michael Cramer <michael@bigmichi1.de> | ||
* @license http://www.horde.org/licenses/bsd BSD | ||
* @category Horde | ||
* @package Http | ||
*/ | ||
class Horde_Http_Request_Peclhttp2 extends Horde_Http_Request_PeclhttpBase | ||
{ | ||
/** | ||
* Map of HTTP authentication schemes from Horde_Http constants to HTTP_AUTH constants. | ||
* @var array | ||
*/ | ||
protected $_httpAuthSchemes = array( | ||
Horde_Http::AUTH_ANY => \http\Client\Curl\AUTH_ANY, | ||
Horde_Http::AUTH_BASIC => \http\Client\Curl\AUTH_BASIC, | ||
Horde_Http::AUTH_DIGEST => \http\Client\Curl\AUTH_DIGEST, | ||
Horde_Http::AUTH_GSSNEGOTIATE => \http\Client\Curl\AUTH_GSSNEG, | ||
Horde_Http::AUTH_NTLM => \http\Client\Curl\AUTH_NTLM, | ||
); | ||
|
||
/** | ||
* Map of proxy types from Horde_Http to implementation specific constants. | ||
* @var array | ||
*/ | ||
protected $_proxyTypes = array( | ||
Horde_Http::PROXY_SOCKS4 => \http\Client\Curl\PROXY_SOCKS4, | ||
Horde_Http::PROXY_SOCKS5 => \http\Client\Curl\PROXY_SOCKS5 | ||
); | ||
|
||
/** | ||
* Constructor | ||
* | ||
* @throws Horde_Http_Exception | ||
*/ | ||
public function __construct($args = array()) | ||
{ | ||
if (!class_exists('\http\Client', false)) { | ||
throw new Horde_Http_Exception('The pecl_http extension is not installed. See http://php.net/http.install'); | ||
} | ||
|
||
parent::__construct($args); | ||
} | ||
|
||
/** | ||
* Send this HTTP request | ||
* | ||
* @throws Horde_Http_Exception | ||
* @return Horde_Http_Response_Base | ||
*/ | ||
public function send() | ||
{ | ||
// at this time only the curl driver is supported | ||
$client = new \http\Client('curl'); | ||
|
||
$body = new \http\Message\Body(); | ||
$data = $this->data; | ||
if (is_array($data)) { | ||
$body->addForm($data); | ||
} else { | ||
$body->append($data); | ||
} | ||
|
||
$httpRequest = new \http\Client\Request($this->method, $this->uri, $this->headers, $body); | ||
|
||
$client->setOptions($this->_httpOptions()); | ||
|
||
$client->enqueue($httpRequest); | ||
|
||
try { | ||
$client->send(); | ||
$httpResponse = $client->getResponse($httpRequest); | ||
} catch (\http\Exception $e) { | ||
throw new Horde_Http_Exception($e); | ||
} | ||
|
||
return new Horde_Http_Response_Peclhttp2($this->uri, $httpResponse); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
<?php | ||
/** | ||
* Copyright 2007-2014 Horde LLC (http://www.horde.org/) | ||
* | ||
* @author Michael Cramer <michael@bigmichi1.de> | ||
* @license http://www.horde.org/licenses/bsd BSD | ||
* @category Horde | ||
* @package Http | ||
*/ | ||
|
||
/** | ||
* @author Michael Cramer <michael@bigmichi1.de> | ||
* @license http://www.horde.org/licenses/bsd BSD | ||
* @category Horde | ||
* @package Http | ||
*/ | ||
abstract class Horde_Http_Request_PeclhttpBase extends Horde_Http_Request_Base { | ||
/** | ||
* Map of HTTP authentication schemes from Horde_Http constants to implementation specific constants | ||
* @var array | ||
*/ | ||
protected $_httpAuthSchemes = array(); | ||
|
||
/** | ||
* Map of proxy types from Horde_Http to implementation specific constants. | ||
* @var array | ||
*/ | ||
protected $_proxyTypes = array(); | ||
|
||
/** | ||
* Constructor | ||
* | ||
* @throws Horde_Http_Exception | ||
*/ | ||
public function __construct($args = array()) | ||
{ | ||
parent::__construct($args); | ||
} | ||
|
||
/** | ||
* Translate a Horde_Http::AUTH_* constant to implementation specific constants. | ||
* | ||
* @return const | ||
* @throws Horde_Http_Exception | ||
*/ | ||
private function _httpAuthScheme() | ||
{ | ||
$httpAuthScheme = $this->proxyAuthenticationScheme; | ||
if (!isset($this->_httpAuthSchemes[$httpAuthScheme])) { | ||
throw new Horde_Http_Exception('Unsupported authentication scheme (' . $httpAuthScheme . ')'); | ||
} | ||
return $this->_httpAuthSchemes[$httpAuthScheme]; | ||
} | ||
|
||
/** | ||
* Translate a Horde_Http::PROXY_* constant to implementation specific constants. | ||
* | ||
* @return const | ||
* @throws Horde_Http_Exception | ||
*/ | ||
private function _proxyType() | ||
{ | ||
$proxyType = $this->proxyType; | ||
if (!isset($this->_proxyTypes[$proxyType])) { | ||
throw new Horde_Http_Exception('Unsupported proxy type (' . $httpAuthScheme . ')'); | ||
} | ||
return $this->_proxyTypes[$proxyType]; | ||
} | ||
|
||
/** | ||
* Generate the http options for the request. | ||
* | ||
* @return array array with options | ||
* @throws Horde_Http_Exception | ||
*/ | ||
protected function _httpOptions() | ||
{ | ||
// Set options | ||
$httpOptions = array('headers' => $this->headers, | ||
'redirect' => (int)$this->redirects, | ||
'ssl' => array('verifypeer' => $this->verifyPeer), | ||
'timeout' => $this->timeout, | ||
'useragent' => $this->userAgent); | ||
|
||
// Proxy settings | ||
if ($this->proxyServer) { | ||
$httpOptions['proxyhost'] = $this->proxyServer; | ||
if ($this->proxyPort) { | ||
$httpOptions['proxyport'] = $this->proxyPort; | ||
} | ||
if ($this->proxyUsername && $this->proxyPassword) { | ||
$httpOptions['proxyauth'] = $this->proxyUsername . ':' . $this->proxyPassword; | ||
$httpOptions['proxyauthtype'] = $this->_httpAuthScheme(); | ||
} | ||
if ($this->proxyType == Horde_Http::PROXY_SOCKS4 || $this->proxyType == Horde_Http::PROXY_SOCKS5) { | ||
$httpOptions['proxytype'] = $this->_proxyType(); | ||
} else if ($this->proxyType != Horde_Http::PROXY_HTTP) { | ||
throw new Horde_Http_Exception(sprintf('Proxy type %s not supported by this request type!', $this->proxyType)); | ||
} | ||
} | ||
|
||
// Authentication settings | ||
if ($this->username) { | ||
$httpOptions['httpauth'] = $this->username . ':' . $this->password; | ||
$httpOptions['httpauthtype'] = $this->_httpAuthScheme($this->authenticationScheme); | ||
} | ||
|
||
return $httpOptions; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
<?php | ||
/** | ||
* Copyright 2007-2014 Horde LLC (http://www.horde.org/) | ||
* | ||
* @author Michael Cramer <michael@bigmichi1.de> | ||
* @license http://www.horde.org/licenses/bsd BSD | ||
* @category Horde | ||
* @package Http | ||
*/ | ||
|
||
/** | ||
* @author Michael Cramer <michael@bigmichi1.de> | ||
* @license http://www.horde.org/licenses/bsd BSD | ||
* @category Horde | ||
* @package Http | ||
*/ | ||
class Horde_Http_Response_Peclhttp2 extends Horde_Http_Response_Base | ||
{ | ||
/** | ||
* HttpMessage object. | ||
* | ||
* @var \http\Client\Response | ||
*/ | ||
protected $_response; | ||
|
||
/** | ||
* Constructor. | ||
* | ||
* @param string $uri | ||
* @param \http\Client\Response $response | ||
*/ | ||
public function __construct($uri, \http\Client\Response $response) | ||
{ | ||
try { | ||
$parent = $response->getParentMessage(); | ||
$location = $parent->getHeader('Location'); | ||
$this->uri = $location; | ||
} catch (HttpRuntimeException $e) { | ||
$this->uri = $uri; | ||
} | ||
|
||
$this->httpVersion = $response->getHttpVersion(); | ||
$this->code = $response->getResponseCode(); | ||
$this->_response = $response; | ||
foreach ($response->getHeaders() as $k => $v) { | ||
$this->headers[strtolower($k)] = $v; | ||
} | ||
} | ||
|
||
public function getBody() | ||
{ | ||
return $this->_response->getBody(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters