Esempio n. 1
0
        public virtual void AppendResponse(ResponseDetails responseDetails)
        {
            int statusCode = (int)responseDetails.Status;
            Writer.WriteLine(RESPONSE_LINE_FORMAT, statusCode, HttpWorkerRequest.GetStatusDescription(statusCode));

            if (responseDetails.Headers != null)
            {
                foreach (var keyValuePair in responseDetails.Headers)
                {
                    Writer.WriteLine(HEADER_FORMAT, keyValuePair.Key, keyValuePair.Value);
                }
            }

            Writer.WriteLine();

            if (!string.IsNullOrEmpty(responseDetails.BodyResponse))
                Writer.WriteLine(responseDetails.BodyResponse);
        }
Esempio n. 2
0
 public void AppendResponse(ResponseDetails responseDetails)
 {
     ResponseDetails = responseDetails;
 }
Esempio n. 3
0
        public void WriteResponse_should_write_status_code_and_status_description_and_empty_line()
        {
            // Arrange
            var stringBuilder = new StringBuilder();
            var logWriter = GetHttpLogWriter(stringBuilder);
            var responseDetails = new ResponseDetails()
            {
                Status = HttpStatusCode.NotFound,
                BodyResponse = "",
                Headers = new List<KeyValuePair<string, string>>()
            };

            // Act
            logWriter.AppendResponse(responseDetails);

            // Assert
            string[] lines = stringBuilder.ToString().Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

            Assert.AreEqual("HTTP/1.1 404 Not Found", lines[0]);
            Assert.AreEqual("", lines[1]);
        }
Esempio n. 4
0
        public void WriteResponse_should_ignore_null_headers_and_empty_body()
        {
            // Arrange
            var stringBuilder = new StringBuilder();
            var logWriter = GetHttpLogWriter(stringBuilder);
            var responseDetails = new ResponseDetails()
            {
                Status = HttpStatusCode.OK,
                BodyResponse = "",
                Headers = null
            };

            // Act
            logWriter.AppendResponse(responseDetails);

            // Assert
            string[] lines = stringBuilder.ToString().Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

            Assert.AreEqual("HTTP/1.1 200 OK", lines[0]);
            Assert.AreEqual("", lines[1]);
        }
Esempio n. 5
0
        public void WriteResponse_should_append_headers_and_response_body_and_empty_line()
        {
            // Arrange
            var stringBuilder = new StringBuilder();
            var logWriter = GetHttpLogWriter(stringBuilder);
            var headers = new List<KeyValuePair<string, string>>()
            {
                new KeyValuePair<string, string>("Server", "Apache"),
                new KeyValuePair<string, string>("Cache-Control", "private, s-maxage=0, max-age=0, must-revalidate"),
                new KeyValuePair<string, string>("Date", "Sun, 12 Apr 2015 19:18:21 GMT"),
                new KeyValuePair<string, string>("Content-Type", "text/html; charset=UTF-8")
            };

            var responseDetails = new ResponseDetails()
            {
                Status = HttpStatusCode.OK,
                BodyResponse = "<html><body></body></html>",
                Headers = headers
            };

            // Act
            logWriter.AppendResponse(responseDetails);

            // Assert
            string[] lines = stringBuilder.ToString().Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

            Assert.AreEqual("HTTP/1.1 200 OK", lines[0]);
            Assert.AreEqual("Server: Apache", lines[1]);
            Assert.AreEqual("Cache-Control: private, s-maxage=0, max-age=0, must-revalidate", lines[2]);
            Assert.AreEqual("Date: Sun, 12 Apr 2015 19:18:21 GMT", lines[3]);
            Assert.AreEqual("Content-Type: text/html; charset=UTF-8", lines[4]);
            Assert.AreEqual("", lines[5]);
            Assert.AreEqual("<html><body></body></html>", lines[6]);
        }
Esempio n. 6
0
        public HttpResponse ExecuteRequest(string httpMethod, string url, string contentType, string postBody, IEnumerable<HeaderItem> headers)
        {
            Uri uri;
            if (!Uri.TryCreate(url, UriKind.Absolute, out uri))
                throw new ArgumentException(url + " is not a valid Uri", "url");

            _restClient.BaseUrl = uri;
            _restClient.CookieContainer = _cookieContainer;

            //
            // Make the request adding the content-type, body and headers
            //
            Method method = GetMethodEnum(httpMethod);
            var request = new RestRequest(method);
            if (method == Method.POST)
            {
                // From the RestSharp docs:
                // "The name of the parameter will be used as the Content-Type header for the request."
                request.AddParameter(contentType, postBody, ParameterType.RequestBody);
            }

            if (headers != null)
            {
                headers = headers.ToList();
                foreach (var keyValuePair in headers)
                {
                    request.AddHeader(keyValuePair.Key, keyValuePair.Value);
                }
            }

            _lastRequest = new RequestDetails()
            {
                Body = postBody,
                Headers = headers,
                Method = httpMethod,
                Url = url
            };

            //
            // Get the response back, parsing the headers
            //
            DateTime startTime = DateTime.UtcNow;
            IRestResponse response = _restClient.Execute(request);
            TimeSpan responseTime = DateTime.UtcNow - startTime;

            List<KeyValuePair<string, string>> keyvaluePairs = new List<KeyValuePair<string, string>>();
            if (response.Headers != null)
            {
                keyvaluePairs = response.Headers.Select(x => new KeyValuePair<string, string>(x.Name, Convert.ToString(x.Value)))
                                                .ToList();
            }

            _lastResponse = new ResponseDetails()
            {
                BodyResponse = response.Content,
                Headers = keyvaluePairs,
                Status = response.StatusCode
            };

            return new HttpResponse()
            {
                StatusCode = response.StatusCode,
                Content = response.Content,
                Headers = keyvaluePairs,
                ResponseTime = responseTime
            };
        }