/// <summary>
        /// GETs url, logs in if we are logged out.
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public async Task <MyHttpWebResponse> GetUrl(string url)
        {
            MyHttpWebResponse response;
            string            responseText = null;

            do
            {
                if (responseText != null)
                {
                    await Login();
                }

                var request = MyHttpWebRequest.Create(url);
                request.CookieContainer = CookieContainer;
                request.Method          = "GET";

                await ThrottleBeforeRequestAsync();

                response = await request.GetResponseAsync();

                responseText = response.ResponseText;
            } while (IsLoggedIn(responseText) == false);

            return(response);
        }
        public async Task <string> PostJson(string url, object payload)
        {
            var requestText      = JsonConvert.SerializeObject(payload);
            var requsstTextBytes = Encoding.UTF8.GetBytes(requestText);

            var request = MyHttpWebRequest.Create(url);

            request.CookieContainer = CookieContainer;
            request.Method          = "POST";
            request.ContentType     = "application/json";
            request.GetRequestStream().Write(requsstTextBytes, 0, requsstTextBytes.Length);

            await ThrottleBeforeRequestAsync();

            var response = await request.GetResponseAsync();

            var responseText = response.ResponseText;

            return(responseText);
        }
        /// <summary>
        /// Login to the website with credentials.
        /// </summary>
        async Task Login()
        {
            Log.Trace("Logging in...");

            var request = MyHttpWebRequest.Create(loginPageUrl);

            request.CookieContainer = CookieContainer;
            request.Method          = "GET";

            await ThrottleBeforeRequestAsync();

            var response = await request.GetResponseAsync();

            var html      = response.HtmlDocument;
            var loginForm = html.GetElementbyId("aspnetForm");

            var form = new WebFormHandler(loginPageUrl, loginForm, CookieContainer);

            form.FillInput("ctl00$bcr$ctl03$ctl07$username", username);
            form.FillInput("ctl00$bcr$ctl03$ctl07$password", password);
            form.FillInput("ctl00$bcr$ctl03$ctl07$loginButton", "Sign in »");
            response = form.SubmitForm();

            if (IsLoggedIn(response.ResponseText))
            {
                Log.Trace("Successfully logged in...");
            }
            else
            {
                Log.Warn("Failed to log in...");
                Log.Trace("Resetting registry stored user details.");
                var registry = Registry.CurrentUser.CreateSubKey(this.GetType().FullName);
                registry.SetValue("username", "");
                registry.SetValue("password", "");
            }
        }