in lib/openai/internal/transport/base_client.rb [88:137]
def follow_redirect(request, status:, response_headers:)
method, url, headers = request.fetch_values(:method, :url, :headers)
location =
Kernel.then do
URI.join(url, response_headers["location"])
rescue ArgumentError
message = "Server responded with status #{status} but no valid location header."
raise OpenAI::Errors::APIConnectionError.new(
url: url,
response: response_headers,
message: message
)
end
request = {**request, url: location}
case [url.scheme, location.scheme]
in ["https", "http"]
message = "Tried to redirect to a insecure URL"
raise OpenAI::Errors::APIConnectionError.new(
url: url,
response: response_headers,
message: message
)
else
nil
end
case [status, method]
in [301 | 302, :post] | [303, _]
drop = %w[content-encoding content-language content-length content-location content-type]
request = {
**request,
method: method == :head ? :head : :get,
headers: headers.except(*drop),
body: nil
}
else
end
if OpenAI::Internal::Util.uri_origin(url) != OpenAI::Internal::Util.uri_origin(location)
drop = %w[authorization cookie host proxy-authorization]
request = {**request, headers: request.fetch(:headers).except(*drop)}
end
request
end