public ArrayList<Document> getDocs(String username,
                                       String password) throws
                                                        HttpStatusException {
        Response res = null;
        ArrayList<Document> docs = new ArrayList<Document>();


        /*
         * 1st Request
         *
         * First hit the "application" (URL) to get the right cookies
         * Can't login and then access transcript page, site doesn't allow it
         */
        Connection conn = Jsoup.connect(URL_TRANS);
        conn.referrer(REQUEST_DATA.get("Referrer"));
        conn.userAgent(REQUEST_DATA.get("User-Agent"));

        conn.header("Accept", REQUEST_DATA.get("Accept"));
        conn.header("Content-Type", REQUEST_DATA.get("Content-Type"));
        conn.header("Dnt", REQUEST_DATA.get("Dnt"));
        conn.header("Origin", REQUEST_DATA.get("Origin"));
        conn.header("Host", REQUEST_DATA.get("Host"));

        try {
            res = conn.method(Method.GET).execute();
        } catch (Exception e) {
            e.printStackTrace();
            throw new HttpStatusException("E1 - URL_TRANS - INITIAL - HTTP " +
                                          "Request Failure",
                                          res.statusCode(),
                                          URL_TRANS);
        }


        /*
         * 2nd Request
         *
         * Now login
         */
        conn.url(URL_LOGIN);
        conn.cookies(res.cookies());

        /*
         * On failed login (bad creds), socket timeout occurs, thus to prevent
         * this, we increase timeout
         */
        conn.timeout(TIMEOUT_LOGIN);

        // Post request body data for login
        conn.data("dologin", REQUEST_DATA.get("dologin"));
        conn.data("mli", username);
        conn.data("password", password);
        conn.data("__albform__", REQUEST_DATA.get("__albform__"));
        conn.data("__albstate__", REQUEST_DATA.get("__albstate__"));
        conn.data("__pybpp__", REQUEST_DATA.get("__pybpp__"));

        try {
            res = conn.method(Method.POST).execute();
        } catch (Exception e) {
            e.printStackTrace();
            throw new HttpStatusException("E1 - URL_LOGIN - LOGIN - HTTP " +
                                          "Request Failure",
                                          res.statusCode(),
                                          URL_LOGIN);
        }


        /*
         * On failed login (bad creds), York site still returns 200 response,
         * thus we have to check for cookies
         */
        if (!res.cookies().containsKey("mayaauth") &&
            !res.cookies().containsKey("pyauth")) {
            // Login failed
            throw new HttpStatusException("E2 - URL_LOGIN - LOGIN - Bad Creds",
                                          res.statusCode(),
                                          URL_LOGIN);
        }
        conn.timeout(TIMEOUT_DEFAULT);


        /*
         * 3rd Request
         *
         * Hit the original URL to actually get the transcript
         */
        conn.url(URL_TRANS);
        conn.cookies(res.cookies());
        try {
            res = conn.method(Method.GET).execute();
            docs.add(res.parse());
        } catch (Exception e) {
            e.printStackTrace();
            throw new HttpStatusException("E1 - URL_TRANS - SECOND - HTTP " +
                                          "Request Failure",
                                          res.statusCode(),
                                          URL_TRANS);
        }


        /*
         * 4th Request
         *
         * Get program
         */
        conn.url(URL_PROGRAM);
        try {
            res = conn.method(Method.GET).execute();
            docs.add(res.parse());
        } catch (Exception e) {
            e.printStackTrace();
            throw new HttpStatusException("E1 - URL_PROGRAM - HTTP Request " +
                                          "Failure",
                                          res.statusCode(),
                                          URL_PROGRAM);
        }


        /*
         * 5th Request
         *
         * Now logout to invalidate the session cookies for security
         */
        conn.url(URL_LOGOUT);
        try {
            res = conn.method(Method.POST).execute();
        } catch (Exception e) {
            e.printStackTrace();
            throw new HttpStatusException("E1 - URL_LOGIN - LOGOUT - HTTP " +
                                          "Request Failure",
                                          res.statusCode(),
                                          URL_LOGIN);
        }

        return docs;
    }