DownloadString() public method

Returns the content of a URL as a string using a specified Encoding
public DownloadString ( string url, long bufferSize = 8192, Encoding encoding = null ) : string
url string
bufferSize long Internal download buffer size used to hold data chunks.
encoding Encoding A .NET Encoding scheme or null to attempt sniffing from Charset.
return string
        public void InvalidUrlTest()
        {
            var client = new HttpClient();

            var html = client.DownloadString("http://weblog.west-wind.com/nonexistantpage.htm");
            Assert.IsTrue(client.WebResponse.StatusCode == System.Net.HttpStatusCode.NotFound);            
            Console.WriteLine(client.WebResponse.StatusCode);                        
        }
        public void InvalidUrlTest()
        {
            var client = new HttpClient();

            var html = client.DownloadString("http://weblog.west-wind.com/nonexistantpage.htm");

            Assert.IsTrue(client.WebResponse.StatusCode == System.Net.HttpStatusCode.NotFound);
            Console.WriteLine(client.WebResponse.StatusCode);
        }
        public async Task ReusePlainHTtpRequest()
        {
            string url = "http://localhost/aspnetperf/static.htm";

            var client = new HttpClient();
            string result = client.DownloadString(url);

            var swatch = new Stopwatch();
            swatch.Start();

            for (int i = 0; i < 100000; i++)
            {
                result = client.DownloadString(url);
            }

            swatch.Stop();

            Console.WriteLine(swatch.ElapsedMilliseconds + " " + result);
        }
        public void HttpTimingsTest()
        {
            var client = new HttpClient();

            var html = client.DownloadString("http://weblog.west-wind.com/posts/2015/Jan/06/Using-Cordova-and-Visual-Studio-to-build-iOS-Mobile-Apps");

            Console.WriteLine(client.WebResponse.ContentLength);
            Console.WriteLine(client.HttpTimings.StartedTime);
            Console.WriteLine("First Byte: " + client.HttpTimings.TimeToFirstByteMs);
            Console.WriteLine("Last Byte: " + client.HttpTimings.TimeToLastByteMs);            
        }
Esempio n. 5
0
        public void HttpTimingsTest()
        {
            var client = new HttpClient();

            var html = client.DownloadString("http://weblog.west-wind.com/posts/2015/Jan/06/Using-Cordova-and-Visual-Studio-to-build-iOS-Mobile-Apps");

            Console.WriteLine(client.WebResponse.ContentLength);
            Console.WriteLine(client.HttpTimings.StartedTime);
            Console.WriteLine("First Byte: " + client.HttpTimings.TimeToFirstByteMs);
            Console.WriteLine("Last Byte: " + client.HttpTimings.TimeToLastByteMs);
        }
Esempio n. 6
0
        public ActionResult New(string message = null)
        {
            ViewData["UserState"] = AppUserState;

            var snippet = new CodeSnippet();
            snippet.Author = this.AppUserState.Name;

            string codeUrl = Request.QueryString["url"];            

            if (!string.IsNullOrEmpty(codeUrl))
            {                
                HttpClient client = new HttpClient();
                client.Timeout = 4000;
                snippet.Code = client.DownloadString(codeUrl);

                snippet.Title = Path.GetFileName(codeUrl); 
                string extension = Path.GetExtension(codeUrl);

                snippet.Language = CodeFormatFactory.GetStringLanguageFromExtension(extension);    
                Response.Write(snippet.Language);
            }

            if (!string.IsNullOrEmpty(message))            
                this.ErrorDisplay.ShowMessage(message);
            
            return this.View("New",snippet);
        }
Esempio n. 7
0
        public ActionResult ShowUrl()
        {
            string url = Request.QueryString["url"];
            string lang = Request.QueryString["language"];
            if (string.IsNullOrEmpty(lang))
                lang = Request.QueryString["lang"] ?? string.Empty;

            if (lang.ToLower() == "csharp")
                lang = "C#";                

            ShowSnippetViewModel model = new ShowSnippetViewModel(this);
            model.AppUserState = this.AppUserState;

            ViewData["originalUrl"] = url;
            ViewData["fileName"] = Path.GetFileName(url);
            ViewData["language"] = lang;

            if (string.IsNullOrEmpty(url))
            {
                ViewData["languageList"] = this.GetLanguageList(lang);
                return View(model);
            }

            HttpClient client = new HttpClient();
            client.Timeout = 4000;
            
            string result = client.DownloadString(url);

            if (result == null)            
                return 
                    this.DisplayErrorPage("Unable to retrieve Code Url", client.ErrorMessage, null);

            if (result.Length > App.Configuration.MaxCodeLength)
                return this.DisplayErrorPage("Snippet is too large", "Your code snippet to display is too long. Snippets can be no larger than " + App.Configuration.MaxCodeLength.ToString("n0") + " bytes.",null);

            busCodeSnippet snippetBusiness = new busCodeSnippet();

            if (string.IsNullOrEmpty(lang))
            {
                string extension = Path.GetExtension(url).ToLower();
                
                if (extension.StartsWith("."))
                    lang = extension.Substring(1);
            }

            model.FormattedCode = snippetBusiness.GetFormattedCode(result, lang, false, false);
            
            snippetBusiness.Dispose();

            return this.View(model);
        }
        int RunHttpRequest()
        {
            using (var client = new HttpClient())
            {                
                string result =  client.DownloadString(testUrl);                
            }
            Interlocked.Increment(ref counter2);

            return 0;
        }
Esempio n. 9
0
        /// <summary>
        /// Checks an individual site and returns a new HttpRequestData object
        /// </summary>
        /// <param name="reqData"></param>
        /// <returns></returns>
        public HttpRequestData CheckSite(HttpRequestData reqData)
        {
            if (CancelThreads)
                return null;

            // create a new instance
            var result = HttpRequestData.Copy(reqData);

            result.ErrorMessage = "Request is incomplete"; // assume not going to make it

            result.IsWarmupRequest =  StartTime.AddSeconds(Options.WarmupSeconds) > DateTime.UtcNow;

            try
            {
                var client = new HttpClient();
                

                    if (!string.IsNullOrEmpty(Options.ReplaceDomain))
                        result.Url = ReplaceDomain(result.Url);

                    if (!string.IsNullOrEmpty(Options.ReplaceQueryStringValuePairs))
                        result.Url = ReplaceQueryStringValuePairs(result.Url, Options.ReplaceQueryStringValuePairs);

                    client.CreateWebRequestObject(result.Url);
                    var webRequest = client.WebRequest;

                    // TODO: Connection Groups might help with sharing connections more efficiently
                    // Initial tests show no improvements - more research required
                    //webRequest.ConnectionGroupName = "_WebSurge_" + Thread.CurrentContext.ContextID;

                    if (!string.IsNullOrEmpty(Options.Username))
                    {
                        client.Username = Options.Username;
                        webRequest.UnsafeAuthenticatedConnectionSharing = true;
                    }
                    if (!string.IsNullOrEmpty(Options.Password))
                        client.Password = Options.Password;

                    webRequest.Method = reqData.HttpVerb;

                    client.ContentType = reqData.ContentType;
                    client.Timeout = Options.RequestTimeoutMs/1000;                    
                
                    // don't auto-add gzip headers and don't decode by default
                    client.UseGZip = false;

                    if (Options.NoContentDecompression)
                        webRequest.AutomaticDecompression = DecompressionMethods.None;
                    else
                        webRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

                    if (!string.IsNullOrEmpty(reqData.RequestContent))
                    {
                        var data = reqData.GetRequestContentBytes();
                        client.AddPostKey(data);
                    }
                    else
                    {
                        webRequest.ContentLength = 0;
                    }

                    foreach (var header in result.Headers)
                    {
                        var lheader = header.Name.ToLower();

                        // Header Overrides that fail if you try to set them
                        // directly in HTTP
                        if (lheader == "cookie" && !string.IsNullOrEmpty(Options.ReplaceCookieValue))
                        {
                            string cookie = Options.ReplaceCookieValue;
                            webRequest.Headers.Add("Cookie", cookie);
                            header.Value = cookie;
                            continue;
                        }
                        if (lheader == "authorization" && !string.IsNullOrEmpty(Options.ReplaceAuthorization))
                        {
                            webRequest.Headers.Add("Authorization", Options.ReplaceAuthorization);
                            header.Value = Options.ReplaceAuthorization;
                            continue;
                        }
                        if (lheader == "user-agent")
                        {
                            client.UserAgent = header.Value;
                            continue;
                        }
                        if (lheader == "accept")
                        {
                            webRequest.Accept = header.Value;
                            continue;
                        }
                        if (lheader == "referer")
                        {
                            webRequest.Referer = header.Value;
                            continue;
                        }
                        if (lheader == "connection")
                        {
                            if (header.Value.ToLower() == "keep-alive")
                                webRequest.KeepAlive = true; // this has no effect
                            else if (header.Value.ToLower() == "close")
                                webRequest.KeepAlive = false;
                            continue;
                        }
                        // set above view property
                        if (lheader == "content-type")
                            continue;
                        // not handled at the moment
                        if (lheader == "proxy-connection")
                            continue; // TODO: Figure out what to do with this one

                        // set explicitly via properties
                        if (lheader == "transfer-encoding")
                        {
                            webRequest.TransferEncoding = header.Value;
                            continue;
                        }
                        if (lheader == "date")
                            continue;
                        if (lheader == "expect")
                        {
                            //webRequest.Expect = header.Value;
                            continue;
                        }
                        if (lheader == "if-modified-since")
                            continue;

                        webRequest.Headers.Add(header.Name, header.Value);
                    }

                    foreach (var plugin in App.Plugins)
                    {
                        try
                        {
                            if (!plugin.OnBeforeRequestSent(result))
                                return result;
                        }
                        catch (Exception ex)
                        {
                            App.Log(plugin.GetType().Name + " failed in OnBeforeRequestSent(): " + ex.Message);
                        }
                    }

                    DateTime dt = DateTime.UtcNow;

                    if (CancelThreads)
                        return null;

                    string httpOutput = client.DownloadString(result.Url);

                    if (CancelThreads)
                        return null;

                    result.TimeTakenMs = (int) DateTime.UtcNow.Subtract(dt).TotalMilliseconds;
                    // result.TimeToFirstByteMs = client.Timings.TimeToFirstByteMs;

                    if (client.Error || client.WebResponse == null)
                    {
                        result.ErrorMessage = client.ErrorMessage;
                        return result;
                    }

                    result.StatusCode = ((int) client.WebResponse.StatusCode).ToString();
                    result.StatusDescription = client.WebResponse.StatusDescription ?? string.Empty;
                    result.TimeToFirstByteMs = client.HttpTimings.TimeToFirstByteMs;

                    result.ResponseLength = (int) client.WebResponse.ContentLength;
                    result.ResponseContent = httpOutput;

                    StringBuilder sb = new StringBuilder();
                    foreach (string key in client.WebResponse.Headers.Keys)
                    {
                        sb.AppendLine(key + ": " + client.WebResponse.Headers[key]);
                    }

                    result.ResponseHeaders = sb.ToString();

                    // update to actual Http headers sent
                    result.Headers.Clear();
                    foreach (string key in webRequest.Headers.Keys)
                    {
                        result.Headers.Add(new HttpRequestHeader() {Name = key, Value = webRequest.Headers[key]});
                    }

                    char statusCode = result.StatusCode[0];
                    if (statusCode == '4' || statusCode == '5')
                    {
                        result.IsError = true;
                        result.ErrorMessage = client.WebResponse.StatusDescription;
                    }
                    else
                    {
                        result.IsError = false;
                        result.ErrorMessage = null;

                        if (Options.MaxResponseSize > 0 && result.ResponseContent.Length > Options.MaxResponseSize)
                            result.ResponseContent = result.ResponseContent.Substring(0, Options.MaxResponseSize);
                    }

                //} // using client
                client.Dispose();

                if (!CancelThreads)
                    OnRequestProcessed(result);

                return result;
                
            }

            // these will occur on shutdown - don't log since they will return
            // unstable results - just ignore
            catch (ThreadAbortException)
            {                
                return null;
            }
            catch (Exception ex)
            {                
                Console.WriteLine("Exception: " + ex.Message);
                result.IsError = true;
                result.ErrorMessage = "CheckSite Error: " + ex.GetBaseException().Message;
                
                if (!CancelThreads)
                    OnRequestProcessed(result);

                return result;
            }
        }
Esempio n. 10
0
        public bool IsWebSurgeAllowedForUrl(string serverUrl)
        {
            string serverRootUrl = GetServerRootUrl(serverUrl);

            if (new Uri(serverRootUrl).IsLoopback)
                return true;

            var http = new HttpClient();
            if (!string.IsNullOrEmpty(StressTester.Options.Username))
                http.Username = StressTester.Options.Username;
            if (!string.IsNullOrEmpty(StressTester.Options.Password))
                http.Password = StressTester.Options.Password;

            try
            {
                var text = http.DownloadString(serverRootUrl + "websurge-allow.txt");
                if (http.WebResponse.StatusCode != System.Net.HttpStatusCode.OK || text.Length > 5)
                {
                    string robots = http.DownloadString(serverRootUrl + "robots.txt");
                    if (!robots.Contains("Allow: WebSurge"))
                        return false;
                }
            }
            catch
            {
                return false;
            }

            return true;
        }