public void ForwardedForHeaderContainsMultipleEntriesRenderFirstValue()
        {
            // Arrange
            var(renderer, httpContext) = CreateWithHttpContext();

#if !ASP_NET_CORE
            httpContext.Request.ServerVariables.Returns(new NameValueCollection {
                { "REMOTE_ADDR", "192.0.0.0" }
            });
            httpContext.Request.Headers.Returns(
                new NameValueCollection {
                { ForwardedForHeader, "127.0.0.1, 192.168.1.1" }
            });
#else
            var headers = new HeaderDict();
            headers.Add(ForwardedForHeader, new StringValues("127.0.0.1, 192.168.1.1"));
            httpContext.Request.Headers.Returns(callinfo => headers);
#endif
            renderer.CheckForwardedForHeader = true;

            // Act
            string result = renderer.Render(new LogEventInfo());

            // Assert
            Assert.Equal("127.0.0.1", result);
        }
예제 #2
0
        public void ForwardedForHeaderContainsMultipleEntriesRenderFirstValue()
        {
            var httpContext = Substitute.For <HttpContextBase>();

#if !ASP_NET_CORE
            httpContext.Request.ServerVariables.Returns(new NameValueCollection {
                { "REMOTE_ADDR", "192.0.0.0" }
            });
            httpContext.Request.Headers.Returns(
                new NameValueCollection {
                { ForwardedForHeader, "127.0.0.1, 192.168.1.1" }
            });
#else
            var headers = new HeaderDict();
            headers.Add(ForwardedForHeader, new StringValues("127.0.0.1, 192.168.1.1"));
            httpContext.Request.Headers.Returns(callinfo => headers);
#endif
            var renderer = new AspNetRequestIpLayoutRenderer {
                CheckForwardedForHeader = true
            };
            renderer.HttpContextAccessor = new FakeHttpContextAccessor(httpContext);

            string result = renderer.Render(new LogEventInfo());

            Assert.Equal("127.0.0.1", result);
        }
예제 #3
0
 public string GetValue(string dataCode)
 {
     if (HeaderDict.ContainsKey(dataCode))
     {
         return(HeaderDict[dataCode]);
     }
     return(string.Empty);
 }
예제 #4
0
 public void SetHeader(string key, string value)
 {
     if (userHeader == null)
     {
         userHeader = new HeaderDict();
     }
     userHeader[key] = value;
 }
예제 #5
0
 public void SetValue(string dataCode, string value)
 {
     if (HeaderDict.ContainsKey(dataCode))
     {
         HeaderDict[dataCode] = value;
     }
     else
     {
         HeaderDict.Add(dataCode, value);
     }
 }
예제 #6
0
        public AsyncHttp(string url,
                         HeaderDict headers, //Dictionary<HttpRequestHeader, string> headers,
                         string postbodyText = null
                         )
        {
            _url    = url;
            _webreq = WebRequest.Create(_url) as HttpWebRequest;

            foreach (var header in headers)
            {
                _webeq_SetHeader_ObeyRule(header.Key, header.Value);
            }

            _postbody_text = postbodyText;
            if (_postbody_text == "")
            {
                _postbody_text = null;
            }

            if (_postbody_text != null)
            {
                _postbody_bytes = Encoding.UTF8.GetBytes(_postbody_text);
            }

            //
            // Determine some HTTP request params automatically
            //

            // == Determine GET or POST ==
            //
            if (_postbody_bytes == null)
            {
                _webreq.Method = WebRequestMethods.Http.Get;
            }
            else
            {
                _webreq.Method = WebRequestMethods.Http.Post;
            }

            // == Determine Content-Length ==
            //
            if (_postbody_bytes != null)
            {
                _webreq.ContentLength = _postbody_bytes.Length;
            }
        }
예제 #7
0
        public void ReferrerPresentRenderNonEmptyString()
        {
            var httpContext = Substitute.For <HttpContextBase>();

#if !NETSTANDARD_1plus
            httpContext.Request.UrlReferrer.Returns(new Uri("http://www.google.com/"));
#else
            var headers = new HeaderDict();
            headers.Add("Referer", new StringValues("http://www.google.com/"));
            httpContext.Request.Headers.Returns((callinfo) => headers);
#endif
            var renderer = new AspNetRequestReferrerRenderer();
            renderer.HttpContextAccessor = new FakeHttpContextAccessor(httpContext);

            string result = renderer.Render(new LogEventInfo());

            Assert.Equal(result, "http://www.google.com/");
        }
        public void ReferrerPresentRenderNonEmptyString()
        {
            // Arrange
            var(renderer, httpContext) = CreateWithHttpContext();

#if !ASP_NET_CORE
            httpContext.Request.UrlReferrer.Returns(new Uri("http://www.google.com/"));
#else
            var headers = new HeaderDict();
            headers.Add("Referer", new StringValues("http://www.google.com/"));
            httpContext.Request.Headers.Returns(callinfo => headers);
#endif

            // Act
            var result = renderer.Render(new LogEventInfo());

            // Assert
            Assert.Equal("http://www.google.com/", result);
        }
        public void NotNullUserAgentRendersEmptyString()
        {
            // Arrange
            var(renderer, httpContext) = CreateWithHttpContext();


#if !ASP_NET_CORE
            httpContext.Request.UserAgent.Returns("TEST");
#else
            var headers = new HeaderDict {
                { "User-Agent", new StringValues("TEST") }
            };
            httpContext.Request.Headers.Returns((callinfo) => headers);
#endif
            // Act
            string result = renderer.Render(new LogEventInfo());

            // Assert
            Assert.Equal("TEST", result);
        }
예제 #10
0
        public void NotNullUserAgentRendersEmptyString()
        {
            var httpContext = Substitute.For <HttpContextBase>();


#if !NETSTANDARD_1plus
            httpContext.Request.UserAgent.Returns("TEST");
#else
            var headers = new HeaderDict();
            headers.Add("User-Agent", new StringValues("TEST"));
            httpContext.Request.Headers.Returns((callinfo) => headers);
#endif

            var renderer = new AspNetRequestUserAgent();
            renderer.HttpContextAccessor = new FakeHttpContextAccessor(httpContext);

            string result = renderer.Render(new LogEventInfo());

            Assert.Equal(result, "TEST");
        }
        public void ForwardedForHeaderNotPresentRenderRemoteAddress()
        {
            // Arrange
            var(renderer, httpContext) = CreateWithHttpContext();
#if !ASP_NET_CORE
            httpContext.Request.ServerVariables.Returns(new NameValueCollection {
                { "REMOTE_ADDR", "192.0.0.0" }
            });
            httpContext.Request.Headers.Returns(new NameValueCollection());
#else
            var headers = new HeaderDict();
            httpContext.Request.Headers.Returns(callinfo => headers);
            httpContext.Connection.RemoteIpAddress.Returns(callinfo => IPAddress.Parse("192.0.0.0"));
#endif
            renderer.CheckForwardedForHeader = true;

            // Act
            string result = renderer.Render(new LogEventInfo());

            // Assert
            Assert.Equal("192.0.0.0", result);
        }
예제 #12
0
        public void ForwardedForHeaderNotPresentRenderRemoteAddress()
        {
            var httpContext = Substitute.For <HttpContextBase>();

#if !ASP_NET_CORE
            httpContext.Request.ServerVariables.Returns(new NameValueCollection {
                { "REMOTE_ADDR", "192.0.0.0" }
            });
            httpContext.Request.Headers.Returns(new NameValueCollection());
#else
            var headers = new HeaderDict();
            httpContext.Request.Headers.Returns(callinfo => headers);
            httpContext.Connection.RemoteIpAddress.Returns(callinfo => IPAddress.Parse("192.0.0.0"));
#endif
            var renderer = new AspNetRequestIpLayoutRenderer {
                CheckForwardedForHeader = true
            };
            renderer.HttpContextAccessor = new FakeHttpContextAccessor(httpContext);

            string result = renderer.Render(new LogEventInfo());

            Assert.Equal("192.0.0.0", result);
        }
예제 #13
0
        private bool ProcessResponse(CURLE result)
        {
            var done = false;

            try
            {
                thisHandle.Free();

                if (result == CURLE.OK)
                {
                    responseHeaderStream.Position = 0;
                    var sr = new StreamReader(responseHeaderStream);

                    // Handle first line
                    {
                        var line  = sr.ReadLine();
                        var index = line.IndexOf(' ');
                        httpVersion = line.Substring(0, index);
                        var nextIndex = line.IndexOf(' ', index + 1);
                        if (int.TryParse(line.Substring(index + 1, nextIndex - index), out var _status))
                        {
                            status = _status;
                        }
                        message = line.Substring(nextIndex + 1);
                    }

                    inHeader = new HeaderDict();

                    while (true)
                    {
                        var line = sr.ReadLine();
                        if (!string.IsNullOrEmpty(line))
                        {
                            var index = line.IndexOf(':');
                            var key   = line.Substring(0, index).Trim();
                            var value = line.Substring(index + 1).Trim();
                            inHeader[key] = value;
                        }
                        else
                        {
                            break;
                        }
                    }

                    var ms = responseBodyStream as MemoryStream;
                    if (ms != null)
                    {
                        inData = ms.ToArray();
                    }

                    if (status / 100 == 3)
                    {
                        if (followRedirect && GetInfo(CURLINFO.REDIRECT_URL, out string location) == CURLE.OK)
                        {
                            uri = new Uri(location);
                        }
                        else
                        {
                            done = true;
                        }
                    }
                    else
                    {
                        done = true;
                    }
                }
                else
                {
                    CurlLog.LogWarning($"Failed to request: {uri}, reason: {result}");
                }

                CloseStreams();
            }
            catch (Exception e)
            {
                CurlLog.LogError("Unexpected exception: " + e);
            }


            return(done);
        }