Home / Function/ resolve_redirects() — requests Function Reference

resolve_redirects() — requests Function Reference

Architecture documentation for the resolve_redirects() function in sessions.py from the requests codebase.

Function python CoreAPI SessionLifecycle calls 13 called by 1

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

Called By

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