• Модуль: clouds
  • Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage_service_openstack.php
  • Класс: CCloudStorageService_OpenStackStorage
  • Вызов: CCloudStorageService_OpenStackStorage::SendRequest
function SendRequest($settings, $verb, $bucket, $file_name='', $params='', $content=false, $additional_headers=array())
{
	$arToken = $this->_GetToken($settings["HOST"], $settings["USER"], $settings["KEY"]);
	if(!$arToken)
		return false;

	$request = new BitrixMainWebHttpClient(array(
		"redirect" => false,
		"streamTimeout" => $this->streamTimeout,
	));
	if (isset($additional_headers["option-file-result"]))
	{
		$request->setOutputStream($additional_headers["option-file-result"]);
	}

	$RequestURI = $file_name;

	$ContentType = "N";
	$request->setHeader("X-Auth-Token", $arToken["X-Auth-Token"]);
	foreach($additional_headers as $key => $value)
	{
		if($key == "Content-Type")
			$ContentType = $value;
		else
			$request->setHeader($key, $value);
	}

	$this->status = 0;
	$this->host = $arToken["X-Storage-Host"];
	$this->port = $arToken["X-Storage-Port"];
	$this->verb = $verb;
	$this->url =  rtrim($arToken["X-Storage-Url"], "/")."/".$bucket.$RequestURI.$params;
	$this->headers = array();
	$this->errno = 0;
	$this->errstr = '';
	$this->result = '';

	$logRequest = false;
	if (defined("BX_CLOUDS_TRACE") && $verb !== "GET" && $verb !== "HEAD")
	{
		$stime = microtime(1);
		$logRequest = array(
			"request_id" => md5((string)mt_rand()),
			"portal" => $_SERVER["HTTP_HOST"],
			"verb" => $this->verb,
			"url" => $this->url,
		);
		AddMessage2Log(json_encode($logRequest), 'clouds', 20);
	}

	$request->setHeader("Content-type", $ContentType);
	$request->query($this->verb, $this->url, $content);

	$this->status = $request->getStatus();
	foreach($request->getHeaders() as $key => $value)
	{
		$this->headers[$key] = is_array($value) ? $value[0] : $value;
	}
	$this->errstr = implode("n", $request->getError());
	$this->errno = $this->errstr? 255: 0;
	$this->result = $request->getResult();

	if ($logRequest)
	{
		$logRequest["status"] = $this->status;
		$logRequest["time"] = round(microtime(true) - $stime, 6);
		$logRequest["headers"] = $this->headers;
		AddMessage2Log(json_encode($logRequest), 'clouds', 0);
	}

	return $request;
}