public function modifyRequest()

in alibabacloud-gateway-pds/php/src/Client.php [43:128]


    public function modifyRequest($context, $attributeMap)
    {
        $request = $context->request;
        $config = $context->configuration;
        $date = Utils::getDateUTCString();
        $request->headers = Tea::merge([
            "date" => $date,
            "host" => $config->endpoint,
            "x-acs-version" => $request->version,
            "x-acs-action" => $request->action,
            "user-agent" => $request->userAgent,
            "x-acs-signature-nonce" => Utils::getNonce(),
            "accept" => "application/json"
        ], $request->headers);
        $signatureAlgorithm = Utils::defaultString($request->signatureAlgorithm, "ACS4-HMAC-SHA256");
        $signatureVersion = Utils::defaultString($request->signatureVersion, "v1");
        $hashedRequestPayload = EncodeUtil::hexEncode(EncodeUtil::hash(Utils::toBytes(""), $signatureAlgorithm));
        if (!Utils::isUnset($request->stream)) {
            $tmp = Utils::readAsBytes($request->stream);
            $hashedRequestPayload = EncodeUtil::hexEncode(EncodeUtil::hash($tmp, $signatureAlgorithm));
            $request->stream = $tmp;
            $request->headers["content-type"] = "application/octet-stream";
        } else {
            if (!Utils::isUnset($request->body)) {
                if (Utils::equalString($request->reqBodyType, "json")) {
                    $jsonObj = Utils::toJSONString($request->body);
                    $hashedRequestPayload = EncodeUtil::hexEncode(EncodeUtil::hash(Utils::toBytes($jsonObj), $signatureAlgorithm));
                    $request->stream = $jsonObj;
                    $request->headers["content-type"] = "application/json; charset=utf-8";
                } else {
                    $m = Utils::assertAsMap($request->body);
                    $formObj = OpenApiUtilClient::toForm($m);
                    $hashedRequestPayload = EncodeUtil::hexEncode(EncodeUtil::hash(Utils::toBytes($formObj), $signatureAlgorithm));
                    $request->stream = $formObj;
                    $request->headers["content-type"] = "application/x-www-form-urlencoded";
                }
            }
        }
        if (StringUtil::equals($signatureVersion, "v4")) {
            if (Utils::equalString($signatureAlgorithm, "ACS4-HMAC-SM3")) {
                $request->headers["x-acs-content-sm3"] = $hashedRequestPayload;
            } else {
                $request->headers["x-acs-content-sha256"] = $hashedRequestPayload;
            }
        } else {
            $request->headers["x-acs-signature-method"] = "HMAC-SHA1";
            $request->headers["x-acs-signature-version"] = "1.0";
        }
        if (!Utils::equalString($request->authType, "Anonymous") && !Utils::isUnset($request->credential)) {
            $credential = $request->credential;
            $credentialModel = $credential->getCredential();
            $authType = $credentialModel->type;
            if (Utils::equalString($authType, "bearer")) {
                $bearerToken = $credentialModel->bearerToken;
                $request->headers["x-acs-bearer-token"] = $bearerToken;
                $request->headers["Authorization"] = "Bearer " . $bearerToken . "";
            } else {
                $accessKeyId = $credentialModel->accessKeyId;
                $accessKeySecret = $credentialModel->accessKeySecret;
                $securityToken = $credentialModel->securityToken;
                if (!Utils::empty_($securityToken)) {
                    $request->headers["x-acs-security-token"] = $securityToken;
                }
                $headers = [];
                if (!Utils::isUnset(@$request->headers["content-type"])) {
                    $headers = $request->headers;
                } else if (StringUtil::equals($request->reqBodyType, "formData") && StringUtil::equals($request->action, "DownloadFile") && StringUtil::equals($request->pathname, "/v2/file/download")) {
                    $headersArray = MapUtil::keySet($request->headers);
                    foreach ($headersArray as $key) {
                        $headers[$key] = @$request->headers[$key];
                    }
                    @$headers["content-type"] = "application/x-www-form-urlencoded; charset=UTF-8";
                } else {
                    $headers = $request->headers;
                }
                if (StringUtil::equals($signatureVersion, "v4")) {
                    $dateNew = StringUtil::subString($date, 0, 10);
                    $region = $this->getRegion($config->endpoint);
                    $signingkey = $this->getSigningkey($signatureAlgorithm, $accessKeySecret, $region, $dateNew);
                    $request->headers["Authorization"] = $this->getAuthorizationV4($request->pathname, $request->method, $request->query, $headers, $signatureAlgorithm, $hashedRequestPayload, $accessKeyId, $signingkey, $request->productId, $region, $dateNew);
                } else {
                    $request->headers["Authorization"] = $this->getAuthorization($request->pathname, $request->method, $request->query, $headers, $accessKeyId, $accessKeySecret);
                }
            }
        }
    }