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 =

Browser-like default ‘Accept` header value.

%w[
  text/html
  application/xhtml+xml
  application/xml;q=0.9
  image/avif
  image/webp
  image/apng
  */*;q=0.8
].join(',')
DEFAULT_USER_AGENT =

Browser-like default ‘User-Agent` header value.

[
  '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 =

Baseline browser-like header set used for outbound requests.

{
  '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.

Parameters:

  • headers (Hash{String, Symbol => String})

    caller-provided headers

  • channel_language (String, nil)

    channel language hint for Accept-Language

  • url (String, Html2rss::Url, nil)

    request URL used to infer Host



63
64
65
66
67
# File 'lib/html2rss/config/request_headers.rb', line 63

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



44
45
46
# File 'lib/html2rss/config/request_headers.rb', line 44

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



55
56
57
# File 'lib/html2rss/config/request_headers.rb', line 55

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



71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/html2rss/config/request_headers.rb', line 71

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