robotstxt-smtp-amazonses/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
2026-08-24 13:41:08 +00:00

91 lines
2.9 KiB
PHP

<?php
declare(strict_types=1);
namespace GuzzleHttp\Exception;
use GuzzleHttp\BodySummarizer;
use GuzzleHttp\BodySummarizerInterface;
use GuzzleHttp\Psr7\DiagnosticValue;
use Psr\Http\Client\RequestExceptionInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
/**
* Base exception for request failures associated with a request.
*/
class RequestException extends TransferException implements RequestExceptionInterface
{
public function __construct(
string $message,
RequestInterface $request,
int $code = 0,
?\Throwable $previous = null
) {
parent::__construct($message, $request, $code, $previous);
}
/**
* Factory method to create a new exception with a normalized error message
*
* @param RequestInterface $request Request sent
* @param ResponseInterface|null $response Response received, if any
* @param \Throwable|null $previous Previous exception
* @param BodySummarizerInterface|null $bodySummarizer Optional body summarizer
*/
public static function create(
#[\SensitiveParameter]
RequestInterface $request,
#[\SensitiveParameter]
?ResponseInterface $response = null,
#[\SensitiveParameter]
?\Throwable $previous = null,
?BodySummarizerInterface $bodySummarizer = null
): self {
if (!$response) {
return new self(
'Error completing request',
$request,
0,
$previous
);
}
$level = (int) \floor($response->getStatusCode() / 100);
if ($level === 4) {
$label = 'Client error';
} elseif ($level === 5) {
$label = 'Server error';
} else {
$label = 'Unsuccessful request';
}
$uri = \GuzzleHttp\Psr7\Utils::redactUriForMessage($request->getUri());
// Client error: `GET /` resulted in a `404 Not Found` response: <html> ... (truncated)
$message = \sprintf(
'%s: `%s %s` resulted in a `%s %s` response',
$label,
DiagnosticValue::escape($request->getMethod()),
$uri,
$response->getStatusCode(),
DiagnosticValue::escape($response->getReasonPhrase())
);
$summary = ($bodySummarizer ?? new BodySummarizer())->summarize($response);
if ($summary !== null) {
$message .= \sprintf(': %s', DiagnosticValue::escape($summary));
}
if ($level === 4) {
return new ClientException($message, $request, $response, $previous);
}
if ($level === 5) {
return new ServerException($message, $request, $response, $previous);
}
return new ResponseException($message, $request, $response, $previous);
}
}