DocumentLoader
Represents the default document loader. This class can be inherited.
using AngleSharp.Events;
using AngleSharp.Extensions;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace AngleSharp.Network.Default
{
public class DocumentLoader : IDocumentLoader
{
private readonly IEnumerable<IRequester> _requesters;
private readonly IBrowsingContext _context;
private readonly Predicate<IRequest> _filter;
public DocumentLoader(IEnumerable<IRequester> requesters, IBrowsingContext context, Predicate<IRequest> filter = null)
{
_requesters = requesters;
_context = context;
_filter = (filter ?? ((Predicate<IRequest>)((IRequest _) => true)));
}
public virtual Task<IResponse> LoadAsync(DocumentRequest request, CancellationToken cancel)
{
IEventAggregator events = _context.Configuration.Events;
Request request2 = new Request();
request2.Address = request.Target;
request2.Content = request.Body;
request2.Method = request.Method;
Request request3 = request2;
foreach (KeyValuePair<string, string> header in request.Headers) {
request3.Headers[header.Key] = header.Value;
}
string cookie = _context.Configuration.GetCookie(request.Target.Origin);
if (cookie != null)
request3.Headers[HeaderNames.Cookie] = cookie;
if (!_filter(request3))
return TaskEx.FromResult<IResponse>(null);
return _requesters.LoadAsync(request3, events, cancel);
}
}
}