mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-07-30 21:30:14 +02:00
feat: improve error handling ux (#3298)
* feat: improve error handling ux * feat: add error messages for failed xml parsing
This commit is contained in:
@@ -102,7 +102,7 @@ abstract class FeedExpander extends BridgeAbstract
|
||||
$httpHeaders = ['Accept: ' . implode(', ', $mimeTypes)];
|
||||
$content = getContents($url, $httpHeaders);
|
||||
if ($content === '') {
|
||||
throw new \Exception(sprintf('Unable to parse xml from `%s` because we got the empty string', $url));
|
||||
throw new \Exception(sprintf('Unable to parse xml from `%s` because we got the empty string', $url), 10);
|
||||
}
|
||||
// Maybe move this call earlier up the stack frames
|
||||
// Disable triggering of the php error-handler and handle errors manually instead
|
||||
@@ -121,7 +121,7 @@ abstract class FeedExpander extends BridgeAbstract
|
||||
// Render only the first error into exception message
|
||||
$firstXmlErrorMessage = $xmlErrors[0]->message;
|
||||
}
|
||||
throw new \Exception(sprintf('Unable to parse xml from `%s` %s', $url, $firstXmlErrorMessage ?? ''));
|
||||
throw new \Exception(sprintf('Unable to parse xml from `%s` %s', $url, $firstXmlErrorMessage ?? ''), 11);
|
||||
}
|
||||
// Restore previous behaviour in case other code relies on it being off
|
||||
libxml_use_internal_errors(false);
|
||||
|
@@ -178,29 +178,28 @@ function getContents(
|
||||
$response['content'] = $cache->loadData();
|
||||
break;
|
||||
default:
|
||||
if (Debug::isEnabled()) {
|
||||
// Include a part of the response body in the exception message
|
||||
throw new HttpException(
|
||||
sprintf(
|
||||
'%s resulted in `%s %s: %s`',
|
||||
$url,
|
||||
$result['code'],
|
||||
Response::STATUS_CODES[$result['code']] ?? '',
|
||||
mb_substr($result['body'], 0, 500),
|
||||
),
|
||||
$result['code']
|
||||
);
|
||||
} else {
|
||||
throw new HttpException(
|
||||
sprintf(
|
||||
'%s resulted in `%s %s`',
|
||||
$url,
|
||||
$result['code'],
|
||||
Response::STATUS_CODES[$result['code']] ?? '',
|
||||
),
|
||||
$result['code']
|
||||
);
|
||||
$exceptionMessage = sprintf(
|
||||
'%s resulted in %s %s %s',
|
||||
$url,
|
||||
$result['code'],
|
||||
Response::STATUS_CODES[$result['code']] ?? '',
|
||||
// If debug, include a part of the response body in the exception message
|
||||
Debug::isEnabled() ? mb_substr($result['body'], 0, 500) : '',
|
||||
);
|
||||
|
||||
// The following code must be extracted if it grows too much
|
||||
$cloudflareTitles = [
|
||||
'<title>Just a moment...',
|
||||
'<title>Please Wait...',
|
||||
'<title>Attention Required!'
|
||||
];
|
||||
foreach ($cloudflareTitles as $cloudflareTitle) {
|
||||
if (str_contains($result['body'], $cloudflareTitle)) {
|
||||
throw new CloudFlareException($exceptionMessage, $result['code']);
|
||||
}
|
||||
}
|
||||
|
||||
throw new HttpException($exceptionMessage, $result['code']);
|
||||
}
|
||||
if ($returnFull === true) {
|
||||
return $response;
|
||||
|
@@ -1,6 +1,10 @@
|
||||
<?php
|
||||
|
||||
final class HttpException extends \Exception
|
||||
class HttpException extends \Exception
|
||||
{
|
||||
}
|
||||
|
||||
final class CloudFlareException extends HttpException
|
||||
{
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user