public Stream HttpPost(string path, byte[] body, bool refreshTokenIfNeeded = true, string contentType = "text/xml")
        {
            var req = CreateRequest(path);

            req.Method      = "POST";
            req.ContentType = contentType;
            if (Config.IsDebugMode)
            {
                Debug.WriteLine(string.Empty);
                Debug.WriteLine("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
                Debug.WriteLine("POST....");
                Debug.WriteLine("URL: " + url + path);
                Debug.WriteLine(req.Headers.ToString());
                Debug.WriteLine(body);
                Debug.WriteLine("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
                Debug.WriteLine("");
            }
            try
            {
                req.ContentLength = body.Length;
                req.GetRequestStream().Write(body, 0, body.Length);
                var resp = req.GetResponse();
                return(resp.GetResponseStream());
            }
            catch (WebException ex)
            {
                if (refreshTokenIfNeeded && ex.Status == WebExceptionStatus.ProtocolError)
                {
                    var authclient = new OAuth2Client.AuthClient(_secrets, EndpointScope);
                    _creds = authclient.refreshAuthCode(_creds);
                    return(HttpPost(path, body, refreshTokenIfNeeded: false));
                }
                throw;
            }
        }
        public Stream HttpGet(string path, bool refreshTokenIfNeeded = true, string contentType = "text/xml")
        {
            var req = CreateRequest(path);

            req.ContentType = contentType;
            req.Method      = "GET";


            try
            {
                var resp = req.GetResponse();

                if (Config.IsDebugMode)
                {
                    Debug.WriteLine(string.Empty);
                    Debug.WriteLine("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
                    Debug.WriteLine("Get....");
                    Debug.WriteLine("URL: " + url + path);
                    Debug.WriteLine("Response from: " + resp.ResponseUri);
                    Debug.WriteLine(resp.Headers.ToString());
                    Debug.WriteLine(resp.ToString());
                    Debug.WriteLine("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
                    Debug.WriteLine(string.Empty);
                }


                return(resp.GetResponseStream());
            }
            catch (WebException ex)
            {
                var resp = (HttpWebResponse)ex.Response;
                if (refreshTokenIfNeeded && ex.Status == WebExceptionStatus.ProtocolError && resp.StatusCode == HttpStatusCode.Unauthorized)
                {
                    var authclient = new OAuth2Client.AuthClient(_secrets, EndpointScope);
                    _creds = authclient.refreshAuthCode(_creds);
                    return(HttpGet(path, refreshTokenIfNeeded: false));
                }
                throw;
            }
        }
		public Stream HttpPost(string path, byte[] body, bool refreshTokenIfNeeded = true, string contentType = "text/xml")
		{
			var req = CreateRequest(path);
			req.Method = "POST";
			req.ContentType = contentType;
			if (Config.IsDebugMode)
			{
				Debug.WriteLine(string.Empty);
				Debug.WriteLine("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
				Debug.WriteLine("POST....");
				Debug.WriteLine("URL: " + url + path);
				Debug.WriteLine(req.Headers.ToString());
				Debug.WriteLine(body);
				Debug.WriteLine("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
				Debug.WriteLine("");
			}
			try
			{
				req.ContentLength = body.Length;
				req.GetRequestStream().Write(body, 0, body.Length);
				var resp = req.GetResponse();
				return resp.GetResponseStream();
			}
			catch (WebException ex)
			{
				var resp = (HttpWebResponse)ex.Response;
				if (refreshTokenIfNeeded && ex.Status == WebExceptionStatus.ProtocolError && resp.StatusCode == HttpStatusCode.Unauthorized)
				{
					var authclient = new OAuth2Client.AuthClient(_secrets, EndpointScope);
					_creds = authclient.refreshAuthCode(_creds);
					_creds = _storage.StoreCredentials(_creds);
					return HttpPost(path, body, refreshTokenIfNeeded: false);
				}
				throw;
			}
		}