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); }