- Модуль: clouds
- Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage_service_rackspace.php
- Класс: CCloudStorageService_RackSpaceCloudFiles
- Вызов: CCloudStorageService_RackSpaceCloudFiles::SendCDNRequest
function SendCDNRequest($settings, $verb, $bucket, $file_name='', $params='', $content=false, $additional_headers=array())
{
$arToken = $this->_GetToken($settings["HOST"], $settings["USER"], $settings["KEY"]);
if(!$arToken)
return false;
if(isset($arToken["X-CDN-Management-Url"]))
{
if(preg_match("#^http://(.*?)(|:d+)(/.*)$#", $arToken["X-CDN-Management-Url"], $arCDN))
{
$Host = $arCDN[1];
$Port = $arCDN[2];
$Urn = $arCDN[3];
$Proto = "http://";
}
elseif(preg_match("#^https://(.*?)(|:d+)(/.*)$#", $arToken["X-CDN-Management-Url"], $arCDN))
{
$Host = $arCDN[1];
$Port = $arCDN[2];
$Urn = $arCDN[3];
$Proto = "https://";
}
else
{
return false;
}
}
else
{
return false;
}
$this->status = 0;
$this->host = $Host;
$this->verb = $verb;
$this->url = $Proto.$Host.($Port? $Port: '').$Urn.CCloudUtil::URLEncode("/".$bucket.$file_name.$params, "UTF-8");
$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 = new BitrixMainWebHttpClient(array(
"redirect" => false,
"streamTimeout" => $this->streamTimeout,
));
$request->setHeader("X-Auth-Token", $arToken["X-Auth-Token"]);
foreach($additional_headers as $key => $value)
{
$request->setHeader($key, $value);
}
$request->query($this->verb, $this->url);
$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;
}