Class: Html2rss::Config::RequestHeaders
- Inherits:
-
Object
- Object
- Html2rss::Config::RequestHeaders
- 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
Acceptheader 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 =
Default
User-Agentheader value. "html2rss/#{Html2rss::VERSION}".freeze
- DEFAULT_HEADERS =
Baseline browser-like header set used for outbound requests.
{ 'Accept' => DEFAULT_ACCEPT, 'Cache-Control' => 'max-age=0', '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
- FORBIDDEN_H2_HEADERS =
Hop-by-hop headers forbidden in HTTP/2 requests (RFC 7540 §8.1.2.2 / RFC 9113 §8.2.1).
%w[connection keep-alive proxy-connection transfer-encoding upgrade].to_set.freeze
Class Method Summary collapse
-
.browser_defaults ⇒ Hash{String => String}
:reek:ManualDispatch :reek:TooManyStatements.
-
.normalize(headers, channel_language:) ⇒ Hash{String => String}
Normalizes the provided headers while applying Html2rss defaults.
Instance Method Summary collapse
-
#initialize(headers, channel_language:) ⇒ RequestHeaders
constructor
A new instance of RequestHeaders.
-
#to_h ⇒ Hash{String => String}
Normalized HTTP headers.
Constructor Details
#initialize(headers, channel_language:) ⇒ RequestHeaders
Returns a new instance of RequestHeaders.
72 73 74 75 |
# File 'lib/html2rss/config/request_headers.rb', line 72 def initialize(headers, channel_language:) @headers = headers @channel_language = channel_language end |
Class Method Details
.browser_defaults ⇒ Hash{String => String}
:reek:ManualDispatch :reek:TooManyStatements
44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/html2rss/config/request_headers.rb', line 44 def browser_defaults defaults = DEFAULT_HEADERS.dup global_headers = Html2rss.defaults.headers global_headers = global_headers.call if global_headers.respond_to?(:call) if global_headers.is_a?(Hash) global_headers.each do |key, value| canonical_key = key.to_s.split('-').map(&:capitalize).join('-') defaults[canonical_key] = value.to_s end end defaults end |
.normalize(headers, channel_language:) ⇒ Hash{String => String}
Normalizes the provided headers while applying Html2rss defaults.
65 66 67 |
# File 'lib/html2rss/config/request_headers.rb', line 65 def normalize(headers, channel_language:) new(headers || {}, channel_language:).to_h end |
Instance Method Details
#to_h ⇒ Hash{String => String}
Returns normalized HTTP headers.
79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/html2rss/config/request_headers.rb', line 79 def to_h defaults = self.class.browser_defaults 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.reject! { |key, _| FORBIDDEN_H2_HEADERS.include?(key.downcase) } defaults.compact end |