示例#1
0
        private static void AddResponse(Table table, Response response)
        {
            if (response == null)
            {
                return;
            }
            Table subtable = CreateSubtable("response", table);

            AddTextRow("status", response.status, subtable);

            AddTextRow("statusText", response.statusText, subtable);
            AddTextRow("redirectURL", response.redirectURL, subtable);
            //AddTextRow("httpVersion", response.httpVersion, subtable);

            //AddTextRow("headersSize", response.headersSize, subtable);
            AddTextRow("comment", response.comment, subtable);
            //AddTextRow("bodySize", response.bodySize, subtable);


            AddCookies(subtable, response.cookies);
            AddNameValueTable(subtable, response.headers, "headers");

            Content content = response.content;

            Table cntable = CreateSubtable("content", subtable);

            AddTextRow("mimeType", content.mimeType, cntable);
            AddTextRow("size", content.size, cntable);
            AddTextRow("encoding", content.encoding, cntable);
            AddTextRow("compression", content.compression, cntable);
            AddTextRow("text", content.text, cntable);
            //AddTextRow("comment", content.comment, cntable);
        }
        private static Content GetBodyInfo(Session oS)
        {
            var content = new Content();

            int num;
            int num2;

            GetDecompressedSize(oS, out num, out num2);
            content.size = num;
            content.compression = num2;
            content.mimeType = oS.oResponse["Content-Type"];

            string mImeType = oS.oResponse.MIMEType;
            bool isMimeTypeTextEquivalent = Utility.IsMimeTypeTextEquivalent(mImeType);
            if (((isMimeTypeTextEquivalent && ("text/plain" == mImeType)) && (oS.responseBodyBytes.Length > 3)) &&
                ((((oS.responseBodyBytes[0] == 0x43) && (oS.responseBodyBytes[1] == 0x57)) &&
                  (oS.responseBodyBytes[2] == 0x53)) ||
                 (((oS.responseBodyBytes[0] == 70) && (oS.responseBodyBytes[1] == 0x4c)) &&
                  (oS.responseBodyBytes[2] == 0x56))))
            {
                isMimeTypeTextEquivalent = false;
            }
            if (isMimeTypeTextEquivalent)
            {
                content.text = oS.GetResponseBodyAsString();
                return content;
            }
            if (oS.responseBodyBytes.Length < MaxBinaryBodyLength)
            {
                content.encoding = "base64";
                content.text = Convert.ToBase64String(oS.responseBodyBytes);
                return content;
            }

            content.comment =
                "Body length exceeded Mocument.Transcoders.HttpArchiveTranscoder.MaxBinaryBodyLength , so body was omitted.";
            return content;
        }
        private static byte[] GetBodyArrayFromContent(Content content, string headers)
        {
            var writeData = new byte[0];
            if (content != null)
            {
                if (content.text == null)
                {
                    return writeData;
                }

                if (content.encoding != null && ("base64" == content.encoding))
                {
                    // ReSharper disable AssignNullToNotNullAttribute
                    return Convert.FromBase64String(content.text);
                    // ReSharper restore AssignNullToNotNullAttribute
                }

                Encoding encoding = Encoding.UTF8;
                if (content.mimeType != null && (content.mimeType.IndexOf("charset", StringComparison.Ordinal) > -1))
                {
                    Match match = new Regex("charset\\s?=\\s?[\"]?(?<TokenValue>[^\";]*)").Match(content.mimeType);
                    if (match.Success && (match.Groups["TokenValue"] != null))
                    {
                        try
                        {
                            encoding = Encoding.GetEncoding(match.Groups["TokenValue"].Value);
                        }
                        // ReSharper disable RedundantCatchClause
                        catch
                        {
                            throw;
                        }
                        // ReSharper restore RedundantCatchClause
                    }
                }
                // ReSharper disable AssignNullToNotNullAttribute
                writeData = encoding.GetBytes(content.text);
                // ReSharper restore AssignNullToNotNullAttribute
                if (headers.Contains("Content-Encoding") && headers.Contains("gzip"))
                {
                    writeData = Utilities.GzipCompress(writeData);
                }
                if (headers.Contains("Content-Encoding") && headers.Contains("deflate"))
                {
                    writeData = Utilities.DeflaterCompress(writeData);
                }
                if (headers.Contains("Transfer-Encoding") && headers.Contains("chunked"))
                {
                    writeData = Utilities.doChunk(writeData, 2);
                }
            }
            return writeData;
        }