resolve_redirects() — requests Function Reference
Architecture documentation for the resolve_redirects() function in sessions.py from the requests codebase.
Entity Profile
Dependency Diagram
graph TD cbf6862f_d124_817f_3342_f1142c276f25["resolve_redirects()"] 29cd946c_8c0d_e37c_acb9_dfb2b83bf42b["SessionRedirectMixin"] cbf6862f_d124_817f_3342_f1142c276f25 -->|defined in| 29cd946c_8c0d_e37c_acb9_dfb2b83bf42b 22824d7d_af0c_f593_6513_06ba28a4fc56["send()"] 22824d7d_af0c_f593_6513_06ba28a4fc56 -->|calls| cbf6862f_d124_817f_3342_f1142c276f25 45e5de53_d23e_6c69_97ea_d5a29d1fcd7b["get_redirect_target()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| 45e5de53_d23e_6c69_97ea_d5a29d1fcd7b 16c8903e_3ca3_7db8_eb77_e4f913e304f4["rebuild_method()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| 16c8903e_3ca3_7db8_eb77_e4f913e304f4 37e21bd7_763f_f217_e84e_39590f4b9478["rebuild_proxies()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| 37e21bd7_763f_f217_e84e_39590f4b9478 18349e5e_3ab4_19be_23d5_20c1111b761b["rebuild_auth()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| 18349e5e_3ab4_19be_23d5_20c1111b761b 22824d7d_af0c_f593_6513_06ba28a4fc56["send()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| 22824d7d_af0c_f593_6513_06ba28a4fc56 5881fd0d_1f47_3061_dcf5_4fc4c9dc8387["close()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| 5881fd0d_1f47_3061_dcf5_4fc4c9dc8387 0ab29509_59a1_1f68_fae2_146376240019["to_native_string()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| 0ab29509_59a1_1f68_fae2_146376240019 f46aaada_a38d_85e6_6125_21764bf29eda["requote_uri()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| f46aaada_a38d_85e6_6125_21764bf29eda 55052edd_2a43_f298_b8d3_9fb1f2641e84["extract_cookies_to_jar()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| 55052edd_2a43_f298_b8d3_9fb1f2641e84 b950528f_167e_7566_bbfa_f2e1929d1939["merge_cookies()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| b950528f_167e_7566_bbfa_f2e1929d1939 f54e6687_0796_d413_58a1_971b32410667["prepare_cookies()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| f54e6687_0796_d413_58a1_971b32410667 e679c8f8_c181_cd54_e322_bcb974be7211["rewind_body()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| e679c8f8_c181_cd54_e322_bcb974be7211 5753d29d_693d_5a68_687e_60c24e80e953["copy()"] cbf6862f_d124_817f_3342_f1142c276f25 -->|calls| 5753d29d_693d_5a68_687e_60c24e80e953 style cbf6862f_d124_817f_3342_f1142c276f25 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
src/requests/sessions.py lines 160–281
def resolve_redirects(
self,
resp,
req,
stream=False,
timeout=None,
verify=True,
cert=None,
proxies=None,
yield_requests=False,
**adapter_kwargs,
):
"""Receives a Response. Returns a generator of Responses or Requests."""
hist = [] # keep track of history
url = self.get_redirect_target(resp)
previous_fragment = urlparse(req.url).fragment
while url:
prepared_request = req.copy()
# Update history and keep track of redirects.
# resp.history must ignore the original request in this loop
hist.append(resp)
resp.history = hist[1:]
try:
resp.content # Consume socket so it can be released
except (ChunkedEncodingError, ContentDecodingError, RuntimeError):
resp.raw.read(decode_content=False)
if len(resp.history) >= self.max_redirects:
raise TooManyRedirects(
f"Exceeded {self.max_redirects} redirects.", response=resp
)
# Release the connection back into the pool.
resp.close()
# Handle redirection without scheme (see: RFC 1808 Section 4)
if url.startswith("//"):
parsed_rurl = urlparse(resp.url)
url = ":".join([to_native_string(parsed_rurl.scheme), url])
# Normalize url case and attach previous fragment if needed (RFC 7231 7.1.2)
parsed = urlparse(url)
if parsed.fragment == "" and previous_fragment:
parsed = parsed._replace(fragment=previous_fragment)
elif parsed.fragment:
previous_fragment = parsed.fragment
url = parsed.geturl()
# Facilitate relative 'location' headers, as allowed by RFC 7231.
# (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource')
# Compliant with RFC3986, we percent encode the url.
if not parsed.netloc:
url = urljoin(resp.url, requote_uri(url))
else:
url = requote_uri(url)
prepared_request.url = to_native_string(url)
self.rebuild_method(prepared_request, resp)
# https://github.com/psf/requests/issues/1084
if resp.status_code not in (
codes.temporary_redirect,
codes.permanent_redirect,
):
# https://github.com/psf/requests/issues/3490
purged_headers = ("Content-Length", "Content-Type", "Transfer-Encoding")
for header in purged_headers:
prepared_request.headers.pop(header, None)
prepared_request.body = None
headers = prepared_request.headers
headers.pop("Cookie", None)
# Extract any cookies sent on the response to the cookiejar
# in the new request. Because we've mutated our copied prepared
# request, use the old one that we haven't yet touched.
Domain
Subdomains
Defined In
Calls
Called By
Source
Frequently Asked Questions
What does resolve_redirects() do?
resolve_redirects() is a function in the requests codebase, defined in src/requests/sessions.py.
Where is resolve_redirects() defined?
resolve_redirects() is defined in src/requests/sessions.py at line 160.
What does resolve_redirects() call?
resolve_redirects() calls 13 function(s): close, copy, extract_cookies_to_jar, get_redirect_target, merge_cookies, prepare_cookies, rebuild_auth, rebuild_method, and 5 more.
What calls resolve_redirects()?
resolve_redirects() is called by 1 function(s): send.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free