public TResponseInfo Request(string url, TimeSpan?duration = null, object variables = null, Func <string, WebClient, string> requestAction = null)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("Visit has ended");
            }

            var request = Visit.AddRequest(VisitorContext.TransformUrl(url, Visit), duration, GetAndResetPause());

            if (variables != null)
            {
                foreach (var kv in (variables as IDictionary <string, object>) ?? new RouteValueDictionary(variables))
                {
                    request.Variables.Add(kv.Key, kv.Value);
                }
            }

            return(Execute(request, requestAction));
        }