def _build_response(self, resp, is_error=False):
        """Build internal :class:`Response <Response>` object
        from given response.
        """


        def build(resp):

            response = Response()

            # Pass settings over.
            response.config = self.config

            if resp:

                # Fallback to None if there's no staus_code, for whatever reason.
                response.status_code = getattr(resp, 'status', None)

                # Make headers case-insensitive.
                response.headers = CaseInsensitiveDict(getattr(resp, 'headers', None))

                # Start off with our local cookies.
                cookies = self.cookies or dict()

                # Add new cookies from the server.
                if 'set-cookie' in response.headers:
                    cookie_header = response.headers['set-cookie']

                    c = SimpleCookie()
                    c.load(cookie_header)

                    for k,v in c.items():
                        cookies.update({k: v.value})

                # Save cookies in Response.
                response.cookies = cookies

            # Save original resopnse for later.
            response.raw = resp

            if is_error:
                response.error = resp

            response.url = self.full_url

            return response


        history = []

        r = build(resp)
        cookies = self.cookies
        self.cookies.update(r.cookies)

        if r.status_code in REDIRECT_STATI and not self.redirect:

            while (
                ('location' in r.headers) and
                ((r.status_code is codes.see_other) or (self.allow_redirects))
            ):

                if not len(history) < self.config.get('max_redirects'):
                    raise TooManyRedirects()

                history.append(r)

                url = r.headers['location']

                # Handle redirection without scheme (see: RFC 1808 Section 4)
                if url.startswith('//'):
                    parsed_rurl = urlparse(r.url)
                    url = '%s:%s' % (parsed_rurl.scheme, url)

                # Facilitate non-RFC2616-compliant 'location' headers
                # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource')
                if not urlparse(url).netloc:
                    url = urljoin(r.url, urllib.quote(urllib.unquote(url)))

                # http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4
                if r.status_code is codes.see_other:
                    method = 'GET'
                else:
                    method = self.method

                # Remove the cookie headers that were sent.
                headers = self.headers
                try:
                    del headers['Cookie']
                except KeyError:
                    pass

                request = Request(
                    url=url,
                    headers=headers,
                    files=self.files,
                    method=method,
                    params=self.session.params,
                    auth=self._auth,
                    cookies=cookies,
                    redirect=True,
                    config=self.config,
                    timeout=self.timeout,
                    _poolmanager=self._poolmanager,
                    proxies = self.proxies,
                )

                request.send()
                cookies.update(request.response.cookies)
                r = request.response
                self.cookies.update(r.cookies)

            r.history = history

        self.response = r
        self.response.request = self
        self.response.cookies.update(self.cookies)
def _build_response ( self , resp , is_error = False ) : def build ( resp ) : response = Response ( ) response . config = self . config if resp : response . status_code = getattr ( resp , 'status' , None ) response . headers = CaseInsensitiveDict ( getattr ( resp , 'headers' , None ) ) cookies = self . cookies or dict ( ) if 'set-cookie' in response . headers : cookie_header = response . headers [ 'set-cookie' ] c = SimpleCookie ( ) c . load ( cookie_header ) for k , v in c . items ( ) : cookies . update ( { k : v . value } ) response . cookies = cookies response . raw = resp if is_error : response . error = resp response . url = self . full_url return response history = [ ] r = build ( resp ) cookies = self . cookies self . cookies . update ( r . cookies ) if r . status_code in REDIRECT_STATI and not self . redirect : while ( ( 'location' in r . headers ) and ( ( r . status_code is codes . see_other ) or ( self . allow_redirects ) ) ) : if not len ( history ) < self . config . get ( 'max_redirects' ) : raise TooManyRedirects ( ) history . append ( r ) url = r . headers [ 'location' ] if url . startswith ( '//' ) : parsed_rurl = urlparse ( r . url ) url = '%s:%s' % ( parsed_rurl . scheme , url ) if not urlparse ( url ) . netloc : url = urljoin ( r . url , urllib . quote ( urllib . unquote ( url ) ) ) if r . status_code is codes . see_other : method = 'GET' else : method = self . method headers = self . headers try : del headers [ 'Cookie' ] except KeyError : pass request = Request ( url = url , headers = headers , files = self . files , method = method , params = self . session . params , auth = self . _auth , cookies = cookies , redirect = True , config = self . config , timeout = self . timeout , _poolmanager = self . _poolmanager , proxies = self . proxies , ) request . send ( ) cookies . update ( request . response . cookies ) r = request . response self . cookies . update ( r . cookies ) r . history = history self . response = r self . response . request = self self . response . cookies . update ( self . cookies )
Build internal :class:`Response <Response>` object
        from given response.