15
16
17
18
19
20
21
22
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
|
# File 'lib/httpx/plugins/follow_redirects.rb', line 15
def request(*args, **options)
keep_open = @keep_open
@keep_open = true
max_redirects = @options.max_redirects || MAX_REDIRECTS
requests = __build_reqs(*args, **options)
responses = __send_reqs(*requests)
loop do
redirect_requests = []
indexes = responses.each_with_index.map do |response, index|
next unless REDIRECT_STATUS.include?(response.status)
request = requests[index]
retry_request = __build_redirect_req(request, response, options)
redirect_requests << retry_request
index
end.compact
break if redirect_requests.empty?
break if max_redirects <= 0
max_redirects -= 1
redirect_responses = __send_reqs(*redirect_requests)
indexes.each_with_index do |index, i2|
requests[index] = redirect_requests[i2]
responses[index] = redirect_responses[i2]
end
end
return responses.first if responses.size == 1
responses
ensure
@keep_open = keep_open
end
|