def run_and_check(self, session, prepped_request, extra_options):
        extra_options = extra_options or {}

        response = session.send(
            prepped_request,
            stream=extra_options.get("stream", False),
            verify=extra_options.get("verify", False),
            proxies=extra_options.get("proxies", {}),
            cert=extra_options.get("cert"),
            timeout=extra_options.get("timeout"),
            allow_redirects=extra_options.get("allow_redirects", True))

        try:
            response.raise_for_status()
        except requests.exceptions.HTTPError:
            # Tried rewrapping, but not supported. This way, it's possible
            # to get reason and code for failure by checking first 3 chars
            # for the code, or do a split on ':'
            logging.error("HTTP error: " + response.reason)
            if self.method != 'GET':
                # The sensor uses GET, so this prevents filling up the log
                # with the body every time the GET 'misses'.
                # That's ok to do, because GETs should be repeatable and
                # all data should be visible in the log (no post data)
                logging.error(response.text)
            raise AirflowException(str(response.status_code)+":"+response.reason)
        return response
Grabs extra options like timeout and actually runs the request,
dataset/ETHPy150Open airbnb/airflow/airflow/hooks/http_hook.py/HttpHook.run_and_check