summaryrefslogtreecommitdiff
path: root/app/Models/SimplePieResponse.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Models/SimplePieResponse.php')
-rw-r--r--app/Models/SimplePieResponse.php20
1 files changed, 19 insertions, 1 deletions
diff --git a/app/Models/SimplePieResponse.php b/app/Models/SimplePieResponse.php
index 17c954e8c..6a444a86a 100644
--- a/app/Models/SimplePieResponse.php
+++ b/app/Models/SimplePieResponse.php
@@ -4,7 +4,25 @@ declare(strict_types=1);
final class FreshRSS_SimplePieResponse extends \SimplePie\File
{
#[\Override]
- protected function on_http_response(): void {
+ protected function on_http_response(string|false $response = ''): void {
syslog(LOG_INFO, 'FreshRSS SimplePie GET ' . $this->get_status_code() . ' ' . \SimplePie\Misc::url_remove_credentials($this->get_final_requested_uri()));
+
+ if (in_array($this->get_status_code(), [429, 503], true)) {
+ $parser = new \SimplePie\HTTP\Parser(is_string($response) ? $response : '');
+ if ($parser->parse()) {
+ $headers = $parser->headers;
+ } else {
+ $headers = [];
+ }
+
+ $retryAfter = FreshRSS_http_Util::setRetryAfter($this->get_final_requested_uri(), $headers['retry-after'] ?? '');
+ if ($retryAfter > 0) {
+ $domain = parse_url($this->get_final_requested_uri(), PHP_URL_HOST);
+ if (is_string($domain) && $domain !== '') {
+ $errorMessage = 'Will retry after ' . date('c', $retryAfter) . ' for domain `' . $domain . '`';
+ Minz_Log::notice($errorMessage);
+ }
+ }
+ }
}
}