DataRequester
The default (ready-to-use) data scheme requester.
using AngleSharp.Extensions;
using System;
using System.IO;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
namespace AngleSharp.Network.Default
{
public sealed class DataRequester : IRequester
{
private static readonly string Base64Section = ";base64";
public bool SupportsProtocol(string protocol)
{
return protocol.Is(ProtocolNames.Data);
}
public Task<IResponse> RequestAsync(IRequest request, CancellationToken cancel)
{
MemoryStream memoryStream = new MemoryStream();
string text = request.Address.Data;
if (text.StartsWith(","))
text = MimeTypeNames.Plain + text;
string[] array = text.SplitCommas();
Response response = new Response();
response.Address = request.Address;
response.Content = memoryStream;
response.StatusCode = HttpStatusCode.BadRequest;
Response response2 = response;
if (array.Length == 2) {
int num = array[0].IndexOf(Base64Section);
bool flag = num >= 0;
string value = flag ? array[0].Remove(num, Base64Section.Length) : array[0];
try {
byte[] array2 = flag ? Convert.FromBase64String(array[1]) : array[1].UrlDecode();
memoryStream.Write(array2, 0, array2.Length);
memoryStream.Position = 0;
response2.Headers.Add(HeaderNames.ContentType, value);
response2.StatusCode = HttpStatusCode.OK;
} catch (FormatException) {
}
}
return TaskEx.FromResult((IResponse)response2);
}
}
}