Example #1
0
 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());
 });
Example #2
0
        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)}");
        });
Example #3
0
 public static IHttpObservable Do(this IHttpObservable query, Action <HttpFetchInfo> action) =>
 query.Filter(f => { action(f); return(true); });
Example #4
0
 public static IObservable <HttpFetch <string> > Text(this IHttpObservable query) =>
 query.WithReader(f => f.Content.ReadAsStringAsync());
Example #5
0
 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)); }));
Example #6
0
 public static IHttpObservable SetHeader(this IHttpObservable query, string name, string value) =>
 query.WithConfigurer(c => query.Configurer(c).WithHeader(name, value));
Example #7
0
 public static IObservable <HttpFetch <T> > Links <T>(this IHttpObservable query, Func <string, HtmlObject, T> selector) =>
 Links(query, null, selector);
Example #8
0
 static IHttpObservable Submit(IHttpObservable query, string formSelector, int?formIndex, Uri url, ISubmissionData <Unit> data) =>
 query.Html().Submit(formSelector, formIndex, url, data);
Example #9
0
 public static IHttpObservable SubmitTo(this IHttpObservable query, Uri url, string formSelector, ISubmissionData <Unit> data) =>
 Submit(query, formSelector, null, url, data);
Example #10
0
 public static IHttpObservable Post(this IHttpObservable query, Uri url, HttpContent content) =>
 HttpObservable.Return(
     from f in query
     select f.Client.Post(url, content));
Example #11
0
 public static IHttpObservable Post(this IHttpObservable query, Uri url, NameValueCollection data) =>
 HttpObservable.Return(
     from f in query
     select f.Client.Post(url, data));
Example #12
0
 public static IHttpObservable Get(this IHttpObservable query, Uri url) =>
 HttpObservable.Return(
     from first in query
     select first.Client.Get(url));
Example #13
0
 public static IObservable <HttpFetch <Zip> > DownloadZip(this IHttpObservable query) =>
 query.DownloadTemp("zip").AsZip();
Example #14
0
 public static IObservable <HttpFetch <T> > WithReader <T>(this IHttpObservable query, Func <HttpFetch <HttpContent>, Task <T> > reader) =>
 query.ReadContent(reader);
Example #15
0
 public static IHttpObservable Filter(this IHttpObservable query, Func <HttpFetchInfo, bool> predicate) =>
 query.WithFilterPredicate(f => query.FilterPredicate(f) && predicate(f));
Example #16
0
 public static IHttpObservable SubmitTo(this IHttpObservable query, Uri url, int formIndex, NameValueCollection data) =>
 Submit(query, null, formIndex, url, data);
Example #17
0
 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));
Example #18
0
 public static IObservable <HttpFetch <string> > Links(this IHttpObservable query, Uri baseUrl) =>
 Links(query, baseUrl, (href, _) => href);
Example #19
0
 public static IHttpObservable SubmitTo(this IHttpObservable query, Uri url, int formIndex, ISubmissionData <Unit> data) =>
 Submit(query, null, formIndex, url, data);
Example #20
0
 public static IObservable <HttpFetch <T> > Links <T>(this IHttpObservable query, Uri baseUrl, Func <string, HtmlObject, T> selector) =>
 query.Html().Links(baseUrl, selector);
Example #21
0
 public static IObservable <HttpFetch <string> > Links(this IHttpObservable query) =>
 query.Links(null);
Example #22
0
 public static IObservable <HttpFetch <HtmlObject> > Tables(this IHttpObservable query) =>
 query.Html().Tables();
Example #23
0
 public static IHttpObservable ReturnErrorneousFetch(this IHttpObservable query) =>
 query.WithOptions(query.Options.WithReturnErroneousFetch(true));
Example #24
0
 public static IObservable <HttpFetch <DataTable> > FormsAsDataTable(this IHttpObservable query) =>
 query.Html().FormsAsDataTable();
Example #25
0
 public static IObservable <HttpFetch <HttpContent> > Buffer(this IHttpObservable query) =>
 query.WithReader(async f =>
 {
     await f.Content.LoadIntoBufferAsync().DontContinueOnCapturedContext();
     return(f.Content);
 });
Example #26
0
 public static IObservable <HttpFetch <HtmlForm> > Forms(this IHttpObservable query) =>
 query.Html().Forms();
Example #27
0
 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));
Example #28
0
 public static IObservable <HttpFetch <ParsedHtml> > Html(this IHttpObservable query) =>
 query.Html(HtmlParser.Default);
Example #29
0
 public static IHttpObservable SubmitTo(this IHttpObservable query, Uri url, string formSelector, NameValueCollection data) =>
 Submit(query, formSelector, null, url, data);
Example #30
0
 public static IHttpObservable SetUserAgent(this IHttpObservable query, string value) =>
 query.WithConfigurer(c => query.Configurer(c).WithUserAgent(value));