private CollectorRequestPayload GetRequestPayload(string serializedData)
        {
            var bytes = new UTF8Encoding().GetBytes(serializedData);

            var shouldCompress = bytes.Length >= CompressMinimumByteLength;

            string compressionType = null;

            if (shouldCompress)
            {
                compressionType = _configuration.CompressedContentEncoding;
                bytes           = DataCompressor.Compress(bytes, compressionType);
            }

            var payload = new CollectorRequestPayload(shouldCompress, compressionType, bytes);

            return(payload);
        }
        private WebRequest BuildRequest(string uri, ConnectionInfo connectionInfo, CollectorRequestPayload requestCollectorRequestPayload)
        {
            var request = (HttpWebRequest)WebRequest.Create(uri);

            if (request.Headers == null)
            {
                throw new NullReferenceException("request.headers");
            }

            request.KeepAlive = true;

            // If a null assignment is made it will bypass the default (IE) proxy settings
            // bypassing those settings could cause 504s to be thrown where the user has
            // implemented a proxy via IE instead of implementing an external proxy and declaring the values in the New Relic config
            if (connectionInfo.Proxy != null)
            {
                request.Proxy = connectionInfo.Proxy;
            }

            request.Timeout     = (int)_configuration.CollectorTimeout;
            request.ContentType = "application/octet-stream";
            request.UserAgent   = $"NewRelic-DotNetAgent/{AgentInstallConfiguration.AgentVersion}";

            request.Method        = _configuration.PutForDataSend ? "PUT" : "POST";
            request.ContentLength = requestCollectorRequestPayload.Data.Length;

            request.Headers.Add("ACCEPT-ENCODING", "gzip");

            var encoding = (requestCollectorRequestPayload.IsCompressed) ? requestCollectorRequestPayload.CompressionType.ToLower() : "identity";

            request.Headers.Add("CONTENT-ENCODING", encoding);

            foreach (var header in _requestHeadersMap)
            {
                request.Headers.Add(header.Key, header.Value);
            }

            return(request);
        }