Class: Html2rss::RequestService::HttpxStrategy

Inherits:
Strategy
  • Object
show all
Defined in:
lib/html2rss/request_service/httpx_strategy.rb

Overview

Strategy to use HTTPX for HTTP requests. Provides native HTTP/2 with ALPN, built-in SSRF protection, streaming byte limits, and redirect handling without monkey-patching. rubocop:disable-next Metrics/ClassLength -- terminal redirect retry colocated with HTTPX transport

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Strategy

#execute, #initialize

Constructor Details

This class inherits a constructor from Html2rss::RequestService::Strategy

Instance Attribute Details

#response_guardResponseGuard (readonly)

Returns:



42
43
44
# File 'lib/html2rss/request_service/httpx_strategy.rb', line 42

def response_guard
  @response_guard
end

Class Method Details

.base_sessionHTTPX::Session

rubocop:disable ThreadSafety/ClassInstanceVariable

Returns:

  • (HTTPX::Session)


22
23
24
25
26
27
28
29
30
# File 'lib/html2rss/request_service/httpx_strategy.rb', line 22

def base_session
  @base_sessions ||= {}
  @base_sessions[HTTPX::Session] ||= HTTPX
                                     .plugin(:follow_redirects)
                                     .plugin(:callbacks)
                                     .plugin(:brotli)
                                     .plugin(:fiber_concurrency)
                                     .plugin(:retries)
end

.base_ssrf_sessionHTTPX::Session

Returns:

  • (HTTPX::Session)


33
34
35
36
# File 'lib/html2rss/request_service/httpx_strategy.rb', line 33

def base_ssrf_session
  @base_ssrf_sessions ||= {}
  @base_ssrf_sessions[HTTPX::Session] ||= base_session.plugin(:ssrf_filter)
end

Instance Method Details

#perform_executeResponse

Executes the request with runtime policy enforcement, returning the normalized response.

Returns:



47
48
49
50
51
52
53
# File 'lib/html2rss/request_service/httpx_strategy.rb', line 47

def perform_execute
  deadline = request_deadline
  @response_guard = ResponseGuard.new(policy: ctx.policy)
  reset_redirect_tracking!
  raw_response = request_with_terminal_redirect_retry(response_guard, deadline:)
  build_response(raw_response)
end