using System; using System.Collections.Generic; using System.Threading; using Microsoft.Net.Http.Headers; namespace MediaBrowser.Common.Net { /// /// Class HttpRequestOptions /// public class HttpRequestOptions { /// /// Gets or sets the URL. /// /// The URL. public string Url { get; set; } public CompressionMethod DecompressionMethod { get; set; } /// /// Gets or sets the accept header. /// /// The accept header. public string AcceptHeader { get => GetHeaderValue(HeaderNames.Accept); set => RequestHeaders[HeaderNames.Accept] = value; } /// /// Gets or sets the cancellation token. /// /// The cancellation token. public CancellationToken CancellationToken { get; set; } /// /// Gets or sets the user agent. /// /// The user agent. public string UserAgent { get => GetHeaderValue(HeaderNames.UserAgent); set => RequestHeaders[HeaderNames.UserAgent] = value; } /// /// Gets or sets the referrer. /// /// The referrer. public string Referer { get => GetHeaderValue(HeaderNames.Referer); set => RequestHeaders[HeaderNames.Referer] = value; } /// /// Gets or sets the host. /// /// The host. public string Host { get => GetHeaderValue(HeaderNames.Host); set => RequestHeaders[HeaderNames.Host] = value; } /// /// Gets or sets the progress. /// /// The progress. public IProgress Progress { get; set; } public Dictionary RequestHeaders { get; private set; } public string RequestContentType { get; set; } public string RequestContent { get; set; } public byte[] RequestContentBytes { get; set; } public bool BufferContent { get; set; } public bool LogRequest { get; set; } public bool LogRequestAsDebug { get; set; } public bool LogErrors { get; set; } public bool LogErrorResponseBody { get; set; } public bool EnableKeepAlive { get; set; } public CacheMode CacheMode { get; set; } public TimeSpan CacheLength { get; set; } public bool EnableDefaultUserAgent { get; set; } public bool AppendCharsetToMimeType { get; set; } private string GetHeaderValue(string name) { RequestHeaders.TryGetValue(name, out var value); return value; } /// /// Initializes a new instance of the class. /// public HttpRequestOptions() { RequestHeaders = new Dictionary(StringComparer.OrdinalIgnoreCase); LogRequest = true; LogErrors = true; CacheMode = CacheMode.None; DecompressionMethod = CompressionMethod.Deflate; } } public enum CacheMode { None = 0, Unconditional = 1 } public enum CompressionMethod { None = 0b00000001, Deflate = 0b00000010, Gzip = 0b00000100 } }