public static IObservable <HttpFetch <string> > Text(this IHttpObservable query, Encoding encoding) => query.WithReader(async f => { using (var stream = await f.Content.ReadAsStreamAsync().DontContinueOnCapturedContext()) using (var reader = new StreamReader(stream, encoding)) return(await reader.ReadToEndAsync().DontContinueOnCapturedContext()); });
public static IHttpObservable Accept(this IHttpObservable query, params string[] mediaTypes) => (mediaTypes?.Length ?? 0) == 0 ? query : query.Do(e => { var c = new StringContent(string.Empty) { Headers = { ContentType = null } }; foreach (var h in e.ContentHeaders) { c.Headers.TryAddWithoutValidation(h.Key, h.Value.AsEnumerable()); } var headers = c.Headers; var actualMediaType = headers.ContentType?.MediaType; if (actualMediaType == null) { var contentDisposition = headers.ContentDisposition; var filename = contentDisposition?.FileName ?? contentDisposition?.FileNameStar; if (!string.IsNullOrEmpty(filename)) { actualMediaType = MimeMapping.FindMimeTypeFromFileName(filename); } if (actualMediaType == null) { throw new Exception($"Content has unspecified type when acceptable types are: {string.Join(", ", mediaTypes)}"); } } Debug.Assert(mediaTypes != null); if (mediaTypes.Any(mediaType => string.Equals(mediaType, actualMediaType, StringComparison.OrdinalIgnoreCase))) { return; } throw new Exception($"Unexpected content of type \"{actualMediaType}\". Acceptable types are: {string.Join(", ", mediaTypes)}"); });
public static IHttpObservable Do(this IHttpObservable query, Action <HttpFetchInfo> action) => query.Filter(f => { action(f); return(true); });
public static IObservable <HttpFetch <string> > Text(this IHttpObservable query) => query.WithReader(f => f.Content.ReadAsStringAsync());
public static IHttpObservable Do(this IHttpObservable query, Action <HttpFetch <HttpContent> > action) => Return(query.Options, query.Configurer, ho => query.WithConfigurer(ho.Configurer) .WithOptions(ho.Options) .WithReader(f => { action(f); return(Task.FromResult(f.Content)); }));
public static IHttpObservable SetHeader(this IHttpObservable query, string name, string value) => query.WithConfigurer(c => query.Configurer(c).WithHeader(name, value));
public static IObservable <HttpFetch <T> > Links <T>(this IHttpObservable query, Func <string, HtmlObject, T> selector) => Links(query, null, selector);
static IHttpObservable Submit(IHttpObservable query, string formSelector, int?formIndex, Uri url, ISubmissionData <Unit> data) => query.Html().Submit(formSelector, formIndex, url, data);
public static IHttpObservable SubmitTo(this IHttpObservable query, Uri url, string formSelector, ISubmissionData <Unit> data) => Submit(query, formSelector, null, url, data);
public static IHttpObservable Post(this IHttpObservable query, Uri url, HttpContent content) => HttpObservable.Return( from f in query select f.Client.Post(url, content));
public static IHttpObservable Post(this IHttpObservable query, Uri url, NameValueCollection data) => HttpObservable.Return( from f in query select f.Client.Post(url, data));
public static IHttpObservable Get(this IHttpObservable query, Uri url) => HttpObservable.Return( from first in query select first.Client.Get(url));
public static IObservable <HttpFetch <Zip> > DownloadZip(this IHttpObservable query) => query.DownloadTemp("zip").AsZip();
public static IObservable <HttpFetch <T> > WithReader <T>(this IHttpObservable query, Func <HttpFetch <HttpContent>, Task <T> > reader) => query.ReadContent(reader);
public static IHttpObservable Filter(this IHttpObservable query, Func <HttpFetchInfo, bool> predicate) => query.WithFilterPredicate(f => query.FilterPredicate(f) && predicate(f));
public static IHttpObservable SubmitTo(this IHttpObservable query, Uri url, int formIndex, NameValueCollection data) => Submit(query, null, formIndex, url, data);
static IHttpObservable Submit(IHttpObservable query, string formSelector, int?formIndex, Uri url, NameValueCollection data) => HttpObservable.Return( from html in query.Html() select HttpQuery.Submit(html.Client, html.Content, formSelector, formIndex, url, data));
public static IObservable <HttpFetch <string> > Links(this IHttpObservable query, Uri baseUrl) => Links(query, baseUrl, (href, _) => href);
public static IHttpObservable SubmitTo(this IHttpObservable query, Uri url, int formIndex, ISubmissionData <Unit> data) => Submit(query, null, formIndex, url, data);
public static IObservable <HttpFetch <T> > Links <T>(this IHttpObservable query, Uri baseUrl, Func <string, HtmlObject, T> selector) => query.Html().Links(baseUrl, selector);
public static IObservable <HttpFetch <string> > Links(this IHttpObservable query) => query.Links(null);
public static IObservable <HttpFetch <HtmlObject> > Tables(this IHttpObservable query) => query.Html().Tables();
public static IHttpObservable ReturnErrorneousFetch(this IHttpObservable query) => query.WithOptions(query.Options.WithReturnErroneousFetch(true));
public static IObservable <HttpFetch <DataTable> > FormsAsDataTable(this IHttpObservable query) => query.Html().FormsAsDataTable();
public static IObservable <HttpFetch <HttpContent> > Buffer(this IHttpObservable query) => query.WithReader(async f => { await f.Content.LoadIntoBufferAsync().DontContinueOnCapturedContext(); return(f.Content); });
public static IObservable <HttpFetch <HtmlForm> > Forms(this IHttpObservable query) => query.Html().Forms();
public static IObservable <HttpFetch <ParsedHtml> > Html(this IHttpObservable query, IHtmlParser parser) => query.Accept(MediaTypeNames.Text.Html) .ReadContent(async fetch => parser.Parse(await fetch.Content.ReadAsStringAsync() .DontContinueOnCapturedContext(), fetch.RequestUrl));
public static IObservable <HttpFetch <ParsedHtml> > Html(this IHttpObservable query) => query.Html(HtmlParser.Default);
public static IHttpObservable SubmitTo(this IHttpObservable query, Uri url, string formSelector, NameValueCollection data) => Submit(query, formSelector, null, url, data);
public static IHttpObservable SetUserAgent(this IHttpObservable query, string value) => query.WithConfigurer(c => query.Configurer(c).WithUserAgent(value));