mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-06 00:02:08 -04:00
do not pass around options after requests get initialized, instead rely on rquest options
This commit is contained in:
parent
b126938a65
commit
29105854e3
@ -13,6 +13,9 @@ Layout/IndentHeredoc:
|
||||
Style/HashSyntax:
|
||||
Enabled: false
|
||||
|
||||
Style/AndOr:
|
||||
Enabled: False
|
||||
|
||||
Naming/UncommunicativeMethodParamName:
|
||||
Enabled: false
|
||||
|
||||
|
@ -6,6 +6,9 @@ require: rubocop-performance
|
||||
Style/HashSyntax:
|
||||
Enabled: false
|
||||
|
||||
Style/AndOr:
|
||||
Enabled: False
|
||||
|
||||
Naming/MethodParameterName:
|
||||
Enabled: false
|
||||
|
||||
|
@ -19,7 +19,7 @@ module WebMock
|
||||
module InstanceMethods
|
||||
private
|
||||
|
||||
def send_requests(*requests, options)
|
||||
def send_requests(*requests)
|
||||
request_signatures = requests.map do |request|
|
||||
request_signature = _build_webmock_request_signature(request)
|
||||
WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
|
||||
@ -47,7 +47,7 @@ module WebMock
|
||||
|
||||
unless real_requests.empty?
|
||||
reqs = real_requests.keys
|
||||
reqs.zip(super(*reqs, options)).each do |req, res|
|
||||
reqs.zip(super(*reqs)).each do |req, res|
|
||||
idx = real_requests[req]
|
||||
|
||||
if WebMock::CallbackRegistry.any_callbacks?
|
||||
|
@ -40,12 +40,12 @@ module HTTPX
|
||||
|
||||
alias_method :digest_auth, :digest_authentication
|
||||
|
||||
def send_requests(*requests, options)
|
||||
def send_requests(*requests)
|
||||
requests.flat_map do |request|
|
||||
digest = request.options.digest
|
||||
|
||||
if digest
|
||||
probe_response = wrap { super(request, options).first }
|
||||
probe_response = wrap { super(request).first }
|
||||
|
||||
if digest && !probe_response.is_a?(ErrorResponse) &&
|
||||
probe_response.status == 401 && probe_response.headers.key?("www-authenticate") &&
|
||||
@ -56,12 +56,12 @@ module HTTPX
|
||||
token = digest.generate_header(request, probe_response)
|
||||
request.headers["authorization"] = "Digest #{token}"
|
||||
|
||||
super(request, options)
|
||||
super(request)
|
||||
else
|
||||
probe_response
|
||||
end
|
||||
else
|
||||
super(request, options)
|
||||
super(request)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -24,15 +24,19 @@ module HTTPX
|
||||
def call(connection, request, response)
|
||||
connection.upgrade_to_h2c(request, response)
|
||||
end
|
||||
|
||||
def extra_options(options)
|
||||
options.merge(max_concurrent_requests: 1)
|
||||
end
|
||||
end
|
||||
|
||||
module InstanceMethods
|
||||
def send_requests(*requests, options)
|
||||
def send_requests(*requests)
|
||||
upgrade_request, *remainder = requests
|
||||
|
||||
return super unless VALID_H2C_VERBS.include?(upgrade_request.verb) && upgrade_request.scheme == "http"
|
||||
|
||||
connection = pool.find_connection(upgrade_request.uri, @options.merge(options))
|
||||
connection = pool.find_connection(upgrade_request.uri, upgrade_request.options)
|
||||
|
||||
return super if connection && connection.upgrade_protocol == :h2c
|
||||
|
||||
@ -42,7 +46,7 @@ module HTTPX
|
||||
upgrade_request.headers["upgrade"] = "h2c"
|
||||
upgrade_request.headers["http2-settings"] = HTTP2Next::Client.settings_header(upgrade_request.options.http2_settings)
|
||||
|
||||
super(upgrade_request, *remainder, options.merge(max_concurrent_requests: 1))
|
||||
super(upgrade_request, *remainder)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -34,13 +34,13 @@ module HTTPX
|
||||
|
||||
alias_method :ntlm_auth, :ntlm_authentication
|
||||
|
||||
def send_requests(*requests, options)
|
||||
def send_requests(*requests)
|
||||
requests.flat_map do |request|
|
||||
ntlm = request.options.ntlm
|
||||
|
||||
if ntlm
|
||||
request.headers["authorization"] = "NTLM #{NTLM.negotiate(domain: ntlm.domain).to_base64}"
|
||||
probe_response = wrap { super(request, options).first }
|
||||
probe_response = wrap { super(request).first }
|
||||
|
||||
if !probe_response.is_a?(ErrorResponse) && probe_response.status == 401 &&
|
||||
probe_response.headers.key?("www-authenticate") &&
|
||||
@ -52,12 +52,12 @@ module HTTPX
|
||||
request.transition(:idle)
|
||||
|
||||
request.headers["authorization"] = "NTLM #{ntlm_challenge}"
|
||||
super(request, options)
|
||||
super(request)
|
||||
else
|
||||
probe_response
|
||||
end
|
||||
else
|
||||
super(request, options)
|
||||
super(request)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -19,10 +19,14 @@ module HTTPX
|
||||
end
|
||||
|
||||
module InstanceMethods
|
||||
private
|
||||
def request(*args, **options)
|
||||
raise ArgumentError, "must perform at least one request" if args.empty?
|
||||
|
||||
def send_requests(*requests, options)
|
||||
request_options = @options.merge(options)
|
||||
requests = args.first.is_a?(Request) ? args : build_requests(*args, options)
|
||||
|
||||
request = requests.first or return super
|
||||
|
||||
request_options = request.options
|
||||
|
||||
return super unless request_options.proxy
|
||||
|
||||
@ -37,18 +41,21 @@ module HTTPX
|
||||
if request_options.debug
|
||||
ssh_options[:verbose] = request_options.debug_level == 2 ? :debug : :info
|
||||
end
|
||||
|
||||
request_uri = URI(requests.first.uri)
|
||||
@_gateway = Net::SSH::Gateway.new(ssh_uri.host, ssh_username, ssh_options)
|
||||
begin
|
||||
@_gateway.open(request_uri.host, request_uri.port) do |local_port|
|
||||
io = build_gateway_socket(local_port, request_uri, request_options)
|
||||
super(*requests, options.merge(io: io))
|
||||
super(*args, **options.merge(io: io))
|
||||
end
|
||||
ensure
|
||||
@_gateway.shutdown!
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def build_gateway_socket(port, request_uri, options)
|
||||
case request_uri.scheme
|
||||
when "https"
|
||||
|
@ -6,7 +6,6 @@ module HTTPX
|
||||
@request = request
|
||||
@session = session
|
||||
@connections = connections
|
||||
@options = @request.options
|
||||
end
|
||||
|
||||
def each(&block)
|
||||
@ -72,7 +71,7 @@ module HTTPX
|
||||
private
|
||||
|
||||
def response
|
||||
@session.__send__(:receive_requests, [@request], @connections, @options) until @request.response
|
||||
@session.__send__(:receive_requests, [@request], @connections) until @request.response
|
||||
|
||||
@request.response
|
||||
end
|
||||
@ -106,7 +105,7 @@ module HTTPX
|
||||
|
||||
request = requests.first
|
||||
|
||||
connections = _send_requests(requests, request.options)
|
||||
connections = _send_requests(requests)
|
||||
|
||||
StreamResponse.new(request, self, connections)
|
||||
end
|
||||
|
@ -223,7 +223,7 @@ module HTTPX
|
||||
def unbounded_body?
|
||||
return @unbounded_body if defined?(@unbounded_body)
|
||||
|
||||
@unbounded_body = (chunked? || @body.bytesize == Float::INFINITY)
|
||||
@unbounded_body = !@body.nil? && (chunked? || @body.bytesize == Float::INFINITY)
|
||||
end
|
||||
|
||||
def chunked?
|
||||
|
@ -32,7 +32,7 @@ module HTTPX
|
||||
raise ArgumentError, "must perform at least one request" if args.empty?
|
||||
|
||||
requests = args.first.is_a?(Request) ? args : build_requests(*args, options)
|
||||
responses = send_requests(*requests, options)
|
||||
responses = send_requests(*requests)
|
||||
return responses.first if responses.size == 1
|
||||
|
||||
responses
|
||||
@ -174,37 +174,35 @@ module HTTPX
|
||||
end
|
||||
end
|
||||
|
||||
def send_requests(*requests, options)
|
||||
request_options = @options.merge(options)
|
||||
|
||||
connections = _send_requests(requests, request_options)
|
||||
receive_requests(requests, connections, request_options)
|
||||
def send_requests(*requests)
|
||||
connections = _send_requests(requests)
|
||||
receive_requests(requests, connections)
|
||||
end
|
||||
|
||||
def _send_requests(requests, options)
|
||||
def _send_requests(requests)
|
||||
connections = []
|
||||
|
||||
requests.each do |request|
|
||||
error = catch(:resolve_error) do
|
||||
connection = find_connection(request, connections, options)
|
||||
connection = find_connection(request, connections, request.options)
|
||||
connection.send(request)
|
||||
end
|
||||
next unless error.is_a?(ResolveError)
|
||||
|
||||
request.emit(:response, ErrorResponse.new(request, error, options))
|
||||
request.emit(:response, ErrorResponse.new(request, error, request.options))
|
||||
end
|
||||
|
||||
connections
|
||||
end
|
||||
|
||||
def receive_requests(requests, connections, options)
|
||||
def receive_requests(requests, connections)
|
||||
responses = []
|
||||
|
||||
begin
|
||||
# guarantee ordered responses
|
||||
loop do
|
||||
request = requests.first
|
||||
pool.next_tick until (response = fetch_response(request, connections, options))
|
||||
pool.next_tick until (response = fetch_response(request, connections, request.options))
|
||||
|
||||
responses << response
|
||||
requests.shift
|
||||
@ -218,7 +216,7 @@ module HTTPX
|
||||
# opportunity to traverse the requests, hence we're returning only a fraction of the errors
|
||||
# we were supposed to. This effectively fetches the existing responses and return them.
|
||||
while (request = requests.shift)
|
||||
responses << fetch_response(request, connections, options)
|
||||
responses << fetch_response(request, connections, request.options)
|
||||
end
|
||||
break
|
||||
end
|
||||
|
@ -49,10 +49,10 @@ module HTTPX
|
||||
|
||||
def build_connection: (URI::Generic, Options) -> Connection
|
||||
|
||||
def send_requests: (*Request, options) -> Array[response]
|
||||
def send_requests: (*Request) -> Array[response]
|
||||
|
||||
def _send_requests: (Array[Request], Options) -> Array[Connection]
|
||||
def _send_requests: (Array[Request]) -> Array[Connection]
|
||||
|
||||
def receive_requests: (Array[Request], Array[Connection], options) -> Array[response]
|
||||
def receive_requests: (Array[Request], Array[Connection]) -> Array[response]
|
||||
end
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user