Class: Html2rss::Config::RequestHeaders

Inherits:
Object
  • Object
show all
Defined in:
lib/html2rss/config/request_headers.rb

Overview

Normalizes HTTP headers for outgoing requests. Ensures a browser-like baseline while respecting caller overrides.

Constant Summary collapse

DEFAULT_ACCEPT =
%w[
  text/html
  application/xhtml+xml
  application/xml;q=0.9
  image/avif
  image/webp
  image/apng
  */*;q=0.8
].join(',')
DEFAULT_USER_AGENT =
[
  'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
  'AppleWebKit/537.36 (KHTML, like Gecko)',
  'Chrome/123.0.0.0',
  'Safari/537.36'
].join(' ')
DEFAULT_HEADERS =
{
  'Accept' => DEFAULT_ACCEPT,
  'Cache-Control' => 'max-age=0',
  'Connection' => 'keep-alive',
  'Sec-Fetch-Dest' => 'document',
  'Sec-Fetch-Mode' => 'navigate',
  'Sec-Fetch-Site' => 'none',
  'Sec-Fetch-User' => '?1',
  'Upgrade-Insecure-Requests' => '1',
  'User-Agent' => DEFAULT_USER_AGENT
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(headers, channel_language:, url:) ⇒ RequestHeaders

Returns a new instance of RequestHeaders.



57
58
59
60
61
# File 'lib/html2rss/config/request_headers.rb', line 57

def initialize(headers, channel_language:, url:)
  @headers = headers
  @channel_language = channel_language
  @url = url
end

Class Method Details

.browser_defaultsHash<String, String>

Returns the unmodified default header set.

Returns:

  • (Hash<String, String>)

    the unmodified default header set



41
42
43
# File 'lib/html2rss/config/request_headers.rb', line 41

def browser_defaults
  DEFAULT_HEADERS.dup
end

.normalize(headers, channel_language:, url:) ⇒ Hash<String, String>

Normalizes the provided headers while applying Html2rss defaults.

Parameters:

  • headers (Hash, nil)

    caller provided headers

  • channel_language (String, nil)

    language defined on the channel

  • url (String)

    request URL used to infer the Host header

Returns:

  • (Hash<String, String>)

    normalized HTTP headers



52
53
54
# File 'lib/html2rss/config/request_headers.rb', line 52

def normalize(headers, channel_language:, url:)
  new(headers || {}, channel_language:, url:).to_h
end

Instance Method Details

#to_hHash<String, String>

Returns normalized HTTP headers.

Returns:

  • (Hash<String, String>)

    normalized HTTP headers



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/html2rss/config/request_headers.rb', line 65

def to_h
  defaults = DEFAULT_HEADERS.dup
  normalized = normalize_custom_headers(headers)

  accept_override = normalized.delete('Accept')
  defaults.merge!(normalized)

  defaults['Accept'] = normalize_accept(accept_override)
  defaults['Accept-Language'] = build_accept_language
  defaults['Host'] ||= request_host

  defaults.compact
end