在使用getlogs的api的时候,会一直返回一个签名不正确。 在我使用这个接口的时候总是会返回`401 Authorization Required
代码如下:
#签名 $parms[‘from’] = $from; $parms[‘to’] = $to; $parms[‘query’] = $query; $parms[‘type’] = ‘log’; $parms[‘powerSql’] = false; $this->sign(‘GET’,’/logstores’ . ‘/’ . $logstore,$accessKeyId,$accessKey,$parms,array( “x-log-signaturemethod” => “hmac-sha1”, “x-log-bodyrawsize” => “0”, “x-log-apiversion” => “0.6.0” ),
#签名方法 function sign($method, $uri, $accessKeyId, $accessKeySecret, $params, $headers) { $contentLength = 0; $headers[“x-log-apiversion”] = “0.6.0”; $headers[“x-log-signaturemethod”] = “hmac-sha1”; // date setLocale(LC_TIME, ‘en_US’); $date = gmdate(‘D, d M Y H:i:s \G\M\T’, time()); $headers[“Date”] = $date; $headers[“Content-Length”] = (string)$contentLength; $contentType = isset($headers[‘Content-Type’]) ? $headers[‘Content-Type’] : ”; $message = $method . ”
” . $contentType . ”
” . $date . ”
“; // header $filterHeaders = []; foreach ($headers as $key => $val) { if (str_starts_with($key, ‘x-log-‘) || str_starts_with($key, ‘x-acs-‘)) { $filterHeaders[$key] = $val; } } ksort($filterHeaders); foreach ($filterHeaders as $key => $val) { $message .= $key . ‘:’ . $val . ”
“; } // uri and params $message .= $uri; if (sizeof($params) > 0) { $message .= ‘?’; }
ksort($params);
$sep = '';
foreach ($params as $key => $val) {
$message .= $sep . $key . '=' . $val;
$sep = '&';
}
// signature & authorization
$signature = base64_encode(hash_hmac('sha1', $message, $accessKeySecret, TRUE));
$auth = 'LOG ' . $accessKeyId . ':' . $signature;
$headers['Authorization'] = $auth;
return $headers;
}