AddPostKey() public méthode

Adds a fully self contained POST buffer to the request. Works for XML or previously encoded content.
public AddPostKey ( byte fullPostBuffer ) : void
fullPostBuffer byte Byte array of a full POST buffer
Résultat void
        public void AddPostKeyGetPostBufferTest()
        {
            var client = new HttpClient();

            client.ContentType = "application/x-www-form-urlencoded";

            client.AddPostKey("ctl00_Content_Username", "Rick");
            client.AddPostKey("ctl00_Content_Password", "seekrit");

            string post = client.GetPostBuffer();

            Console.WriteLine(post);

            Assert.IsTrue(post.Contains("&ctl00_Content_Password="));
        }
        public void AddPostKeyRawGetPostBufferTest()
        {
            var client = new HttpClient();

            client.ContentType = "application/x-www-form-urlencoded";

            // raw POST buffer
            client.AddPostKey("name=Rick&company=West%20Wind");

            string post = client.GetPostBuffer();

            Console.WriteLine(post);

            Assert.IsTrue(post == "name=Rick&company=West%20Wind");
        }
        private HttpClient CreateHttpClient(string url, string json = null)
        {
            var http = new Westwind.Utilities.InternetTools.HttpClient();

            http.CreateWebRequestObject(url);
            CurrentUrl    = url;
            http.PostMode = HttpPostMode.Json;
            http.WebRequest.Headers.Add("Accept-Charset", "utf-8");
            http.WebRequest.ContentType = "application/json";
            http.WebRequest.Headers.Add("Authorization", "Bearer " + MediumApiUserToken);


            if (!string.IsNullOrEmpty(json))
            {
                http.AddPostKey(json);
            }

            return(http);
        }
        /// <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;
            }
        }