Class: Html2rss::RequestService::HttpxStrategy
- 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
- #response_guard ⇒ ResponseGuard readonly
Class Method Summary collapse
-
.base_session ⇒ HTTPX::Session
rubocop:disable ThreadSafety/ClassInstanceVariable.
- .base_ssrf_session ⇒ HTTPX::Session
Instance Method Summary collapse
-
#perform_execute ⇒ Response
Executes the request with runtime policy enforcement, returning the normalized response.
Methods inherited from Strategy
Constructor Details
This class inherits a constructor from Html2rss::RequestService::Strategy
Instance Attribute Details
#response_guard ⇒ ResponseGuard (readonly)
42 43 44 |
# File 'lib/html2rss/request_service/httpx_strategy.rb', line 42 def response_guard @response_guard end |
Class Method Details
.base_session ⇒ HTTPX::Session
rubocop:disable ThreadSafety/ClassInstanceVariable
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_session ⇒ 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_execute ⇒ Response
Executes the request with runtime policy enforcement, returning the normalized response.
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 |