public static function buildCanonicalString(HttpRequest $request, $bucket, $objectKey) { $buildString = $request->getMethod() . self::$NEW_LINE; $headersToSign = array(); foreach ($request->getHeaders() as $key => $value) { if (empty($key)) { continue; } $lowerKey = strtolower($key); if ($lowerKey == strtolower(OSSHeaders::CONTENT_TYPE) || $lowerKey == strtolower(OSSHeaders::CONTENT_MD5) || $lowerKey == strtolower(OSSHeaders::DATE) || strpos($lowerKey, OSSHeaders::OSS_PREFIX) === 0) { $headersToSign[$lowerKey] = $value; } } if (!isset($headersToSign[strtolower(OSSHeaders::CONTENT_TYPE)])) { $headersToSign[strtolower(OSSHeaders::CONTENT_TYPE)] = ''; } if (!isset($headersToSign[strtolower(OSSHeaders::CONTENT_MD5)])) { $headersToSign[strtolower(OSSHeaders::CONTENT_MD5)] = ''; } // Add querys that have the prefix "x-oss-" foreach ($request->getParameters() as $key => $value) { if (strpos($key, OSSHeaders::OSS_PREFIX) === 0) { $headersToSign[$key] = $value; } } // Sort ksort($headersToSign); // Add all headers to sign to the builder foreach ($headersToSign as $key => $value) { if (strpos($key, OSSHeaders::OSS_PREFIX) === 0) { $buildString = $buildString . $key . ':' . $value; } else { $buildString .= $value; } $buildString .= self::$NEW_LINE; } return $buildString . self::buildCanonicalizedResource(self::buildResourcePath($bucket, $objectKey), $request->getParameters()); }