diff --git a/src/Task/RequestTask.php b/src/Task/RequestTask.php index 5512c62..16997e5 100644 --- a/src/Task/RequestTask.php +++ b/src/Task/RequestTask.php @@ -89,7 +89,7 @@ public function execute(ProcessState $state): void // Handle empty results try { if (!\in_array($response->getStatusCode(), $options['valid_response_code'], false)) { - $state->setErrorOutput($response->getContent()); + $state->setErrorOutput($response->getContent(false)); if (TaskConfiguration::STRATEGY_SKIP === $state->getTaskConfiguration()->getErrorStrategy()) { $state->setSkipped(true); @@ -102,17 +102,31 @@ public function execute(ProcessState $state): void $state->setOutput($response->getContent()); } catch (\Throwable $e) { - $this->logger->error( - 'REST request failed', - [ - 'client' => $options['client'], - 'options' => $options, - 'request_options' => $requestOptions, - 'message' => $e->getMessage(), - 'raw_headers' => $response->getHeaders(false), - 'raw_body' => $response->getContent(false), - ] - ); + $allowRedirectionException = false; + $allowClientException = false; + foreach ($options['valid_response_code'] as $code) { + if ($code >= 300 && $code < 400) { + $allowRedirectionException = true; + } + if ($code >= 400 && $code < 500) { + $allowClientException = true; + } + } + if (!($allowRedirectionException && $e instanceof RedirectionExceptionInterface) + && !($allowClientException && $e instanceof ClientExceptionInterface) + ) { + $this->logger->error( + 'REST request failed', + [ + 'client' => $options['client'], + 'options' => $options, + 'request_options' => $requestOptions, + 'message' => $e->getMessage(), + 'raw_headers' => $response->getHeaders(false), + 'raw_body' => $response->getContent(false), + ] + ); + } throw $e; }