12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- using AngleSharp.Html.Dom;
- using AngleSharp.Html.Parser;
- using Rac.Tools;
- using System.Collections.Generic;
- using System.IO;
- using System.Net;
- using System.Net.Mime;
- using System.Text;
- namespace Rac.Models
- {
- internal class Response
- {
- public HttpStatusCode StatusCode { get; set; }
- public string StatusDescription { get; set; }
- public WebHeaderCollection Headers { get; set; }
- public byte[] Body { get; set; }
- public string ContentType => Headers?["content-type"];
- public bool GetHtmlDocument(out IHtmlDocument html)
- {
- var contentType = ContentType;
- if (null == contentType)
- {
- html = null;
- return false;
- }
- var ct = new ContentType(contentType);
- if (ct.MediaType != "text/html")
- {
- html = null;
- return false;
- }
- using var stream = new MemoryStream(Body);
- var doc = new HtmlParser().ParseDocument(stream);
- html = doc;
- return true;
- }
- public HttpHeader[] GetServerTimeHeaders()
- {
- var lst = new List<HttpHeader>(2);
- var last = Headers?["last-modified"];
- var date = Headers?["date"];
- if (false == string.IsNullOrEmpty(last)) lst.Add(new HttpHeader("last-modified", last));
- if (false == string.IsNullOrEmpty(date)) lst.Add(new HttpHeader("date", date));
- return lst.ToArray();
- }
- public bool GetCss(out string css)
- {
- var contentType = ContentType;
- if (null == contentType)
- {
- css = null;
- return false;
- }
- var ct = new ContentType(contentType);
- if (ct.MediaType != "text/css")
- {
- css = null;
- return false;
- }
- var enc = Encoding.GetEncoding(ct.CharSet ?? "utf-8");
- css = enc.GetString(Body);
- return true;
- }
- public bool GetRedirect(out string redirectUrl)
- {
- if (false == StatusCode.In(HttpStatusCode.TemporaryRedirect, HttpStatusCode.Redirect, HttpStatusCode.Moved))
- {
- redirectUrl = null;
- return false;
- }
- redirectUrl = Headers["location"];
- return true;
- }
- }
- }
|