private static function httpErrors()

in src/ClientImpl.php [677:748]


    private static function httpErrors(
        \Psr\Http\Message\RequestInterface $request,
        \Psr\Http\Message\ResponseInterface $response,
        array $options
    )
    {
        $statusCode = $response->getStatusCode();
        if (intval($statusCode / 100) == 2) {
            return;
        }
        $content = isset($options['sink']) ? $options['sink']->getMemContent() :
            $response->getBody()->getContents();
        $code = 'BadErrorResponse';
        $message = '';
        $ec = '';
        $requestId = '';
        $errorFields = [];

        $xmlStr = $content;
        if ($xmlStr === '' && $response->hasHeader('x-oss-err')) {
            $xmlStr = base64_decode($response->getHeader('x-oss-err')[0]);
        }

        if (strpos($xmlStr, '<Error>') !== false) {
            try {
                $xml = Utils::parseXml($xmlStr);
                $code = isset($xml->Code) ? (string)$xml->Code : $code;
                $message = isset($xml->Message) ? (string)$xml->Message : '';
                $ec = isset($xml->EC) ? (string)$xml->EC : '';
                $requestId = isset($xml->RequestId) ? (string)$xml->RequestId : '';
                foreach ($xml as $key => $val) {
                    $errorFields[$key] = (string)$val;
                }
            } catch (\Exception $e) {
                //maybe contains speical char, from 0x1 - 0x1F
                //find <Code>...</Code> <Message>...</Message> <RequestId>...</RequestId> <EC>...</EC>
                $value = Utils::findXmlElementText($xmlStr, 'Code');
                if ($value !== '') {
                    $code = $value;
                    $message = Utils::findXmlElementText($xmlStr, 'Message');
                    $requestId = Utils::findXmlElementText($xmlStr, 'RequestId');
                    $ec = Utils::findXmlElementText($xmlStr, 'EC');
                } else {
                    $message = 'Failed to parse xml from response body, part response body ' . substr($xmlStr, 0, 256);
                }
            }
        } else {
            $message = 'Not found tag <Error>, part response body ' . substr($xmlStr, 0, 256);
        }

        if ($requestId == '' && $response->hasHeader('x-oss-request-id')) {
            $requestId = $response->getHeader('x-oss-request-id')[0];
        }

        if ($ec == '' && $response->hasHeader('x-oss-ec')) {
            $ec = $response->getHeader('x-oss-ec')[0];
        }

        throw new Exception\ServiceException(
            [
                'status_code' => $statusCode,
                'request_id' => $requestId,
                'code' => $code,
                'message' => $message,
                'ec' => $ec,
                'request_target' => $request->getMethod() . ' ' . $request->getUri(),
                'snapshot' => $content,
                'headers' => $response->getHeaders(),
                'error_fields' => $errorFields
            ]
        );
    }