Module: Braintrust::Internal::Http
- Defined in:
- lib/braintrust/internal/http.rb
Overview
HTTP utilities for redirect following and response decompression. Drop-in enhancement for raw Net::HTTP request calls throughout the SDK.
Constant Summary collapse
- DEFAULT_MAX_REDIRECTS =
5
Class Method Summary collapse
-
.decompress_response!(response) ⇒ void
Decompress an HTTP response body in place based on Content-Encoding.
-
.with_redirects(uri, request, max_redirects: DEFAULT_MAX_REDIRECTS) ⇒ Net::HTTPResponse
Execute an HTTP request, following redirects as needed.
Class Method Details
.decompress_response!(response) ⇒ void
This method returns an undefined value.
Decompress an HTTP response body in place based on Content-Encoding. No-op if the response has no recognized encoding.
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/braintrust/internal/http.rb', line 58 def self.decompress_response!(response) encoding = response["content-encoding"]&.downcase case encoding when "gzip", "x-gzip" gz = Zlib::GzipReader.new(StringIO.new(response.body)) response.body.replace(gz.read) gz.close response.delete("content-encoding") end end |
.with_redirects(uri, request, max_redirects: DEFAULT_MAX_REDIRECTS) ⇒ Net::HTTPResponse
Execute an HTTP request, following redirects as needed.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/braintrust/internal/http.rb', line 23 def self.with_redirects(uri, request, max_redirects: DEFAULT_MAX_REDIRECTS) response = perform_request(uri, request) redirects = 0 original_request = request while response.is_a?(Net::HTTPRedirection) redirects += 1 if redirects > max_redirects raise Error, "Too many redirects (max #{max_redirects})" end location = response["location"] unless location raise Error, "Redirect response #{response.code} without Location header" end redirect_uri = URI(location) redirect_uri = uri + redirect_uri unless redirect_uri.host Log.debug("[HTTP] Following #{response.code} redirect to #{redirect_uri}") request = build_redirect_request(response, redirect_uri, original_request, uri) uri = redirect_uri response = perform_request(uri, request) end response end |