SimplePieResponse.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. <?php
  2. declare(strict_types=1);
  3. final class FreshRSS_SimplePieResponse extends \SimplePie\File
  4. {
  5. #[\Override]
  6. protected function on_http_response($response, array $curl_options = []): void {
  7. if (FreshRSS_Context::systemConf()->simplepie_syslog_enabled) {
  8. syslog(LOG_INFO, 'FreshRSS SimplePie GET ' . $this->get_status_code() . ' ' . \SimplePie\Misc::url_remove_credentials($this->get_final_requested_uri()));
  9. }
  10. if (in_array($this->get_status_code(), [429, 503], true)) {
  11. $parser = new \SimplePie\HTTP\Parser(is_string($response) ? $response : '');
  12. if ($parser->parse()) {
  13. $headers = $parser->headers;
  14. } else {
  15. $headers = [];
  16. }
  17. $proxy = is_string($curl_options[CURLOPT_PROXY] ?? null) ? $curl_options[CURLOPT_PROXY] : '';
  18. $retryAfter = FreshRSS_http_Util::setRetryAfter($this->get_final_requested_uri(), $proxy, $headers['retry-after'] ?? '');
  19. if ($retryAfter > 0) {
  20. $domain = parse_url($this->get_final_requested_uri(), PHP_URL_HOST);
  21. if (is_string($domain) && $domain !== '') {
  22. if (is_int($port = parse_url($this->get_final_requested_uri(), PHP_URL_PORT))) {
  23. $domain .= ':' . $port;
  24. }
  25. $errorMessage = 'Will retry after ' . date('c', $retryAfter) . ' for domain `' . $domain . '`';
  26. Minz_Log::notice($errorMessage);
  27. }
  28. }
  29. }
  30. }
  31. }