You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.4 KiB
62 lines
1.4 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yii\elasticsearch; |
|
|
|
use Guzzle\Http\Exception\ClientErrorResponseException; |
|
use yii\base\Exception; |
|
use yii\helpers\Json; |
|
|
|
/** |
|
* Class GuzzleConnection |
|
* |
|
* @author Carsten Brandt <mail@cebe.cc> |
|
* @since 2.0 |
|
*/ |
|
class GuzzleConnection extends Connection |
|
{ |
|
/** |
|
* @var \Guzzle\Http\Client |
|
*/ |
|
private $_http; |
|
|
|
protected function httpRequest($type, $url, $body = null) |
|
{ |
|
if ($this->_http === null) { |
|
$this->_http = new \Guzzle\Http\Client('http://localhost:9200/');// TODO use active node |
|
//$guzzle->setDefaultOption() |
|
} |
|
$requestOptions = []; |
|
if ($type == 'head') { |
|
$requestOptions['exceptions'] = false; |
|
} |
|
if ($type == 'get' && $body !== null) { |
|
$type = 'post'; |
|
} |
|
try{ |
|
$response = $this->_http->createRequest( |
|
strtoupper($type) |
|
, $url, |
|
null, |
|
$body, |
|
$requestOptions |
|
)->send(); |
|
} catch(ClientErrorResponseException $e) { |
|
if ($e->getResponse()->getStatusCode() == 404) { |
|
return false; |
|
} |
|
throw new Exception("elasticsearch error:\n\n" |
|
. $body . "\n\n" . $e->getMessage() |
|
. print_r(Json::decode($e->getResponse()->getBody(true)), true), 0, $e); |
|
} |
|
if ($type == 'head') { |
|
return $response->getStatusCode() == 200; |
|
} |
|
return Json::decode($response->getBody(true)); |
|
} |
|
|
|
} |