<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _get_authorization_token(self, session):
 """Load the HubiC form, submit it and return an authorization token. This will load the HTML form to accept if the application can access the user account and submit the form using the user's credentials. :raises keystoneclient.exceptions.AuthorizationFailure: if something goes wrong. :returns: The (short lived) authorization code to use to get the refresh token. :rtype: string """


        request_scope = 'account.r,credentials.r'

        params = {
            'client_id': self.client_id,
            'redirect_uri': self.redirect_uri,
            'response_type': 'code',
            'scope': request_scope,
            'state': random_str_generator(),
        }

        r = session.get("https://api.hubic.com/oauth/auth",
                        params=params,
                        authenticated=False)
        if r.status_code != 200:
            raise AuthorizationFailure()

        oauth_match = re.search(r'name="oauth" value="([0-9]+)"', r.text)
        if oauth_match is None:
            raise AuthorizationFailure()

        oauth_value = oauth_match.group(1)
        if oauth_value is None:
            AuthorizationFailure()

        payload = {
            'oauth': oauth_value,
            'action': 'accepted',
            'account': 'r',
            'credentials': 'r',
            'login': self.email,
            'user_pwd': self.password,
        }

        # this is necessary because the API will return a 509 error
        # (bandwidth exceeded) if we don't wait a little
        time.sleep(2)

        headers = {
            'Referer': r.url,
            'Content-Type': 'application/x-www-form-urlencoded',
        }

        r = session.post("https://api.hubic.com/oauth/auth",
                         headers=headers,
                         data=payload,
                         redirect=False,
                         authenticated=False)
        if r.status_code != 302:
            raise AuthorizationFailure()

        # location looks like this, and we need the code:
        # http://localhost/?code=...&scope=account.r&state=randomstring
        location_info = dict(
            map(lambda item: item.split('='),
                r.headers['location'].split('?')[1].split('&')
            )
        )
        assert (
            'code'  in location_info and
            'scope' in location_info and location_info['scope'] == request_scope and
            'state' in location_info and location_info['state'] == params['state']
        )

        return location_info['code']