예제 #1
0
        /// <summary>
        /// Submits the body of the form.
        /// http://www.w3.org/html/wg/drafts/html/master/forms.html#submit-body
        /// </summary>
        void SubmitAsEntityBody(Url action)
        {
            var    encoding    = String.IsNullOrEmpty(AcceptCharset) ? Owner.CharacterSet : AcceptCharset;
            var    formDataSet = ConstructDataSet();
            var    enctype     = Enctype;
            var    mimeType    = String.Empty;
            Stream result      = null;

            if (enctype.Equals(MimeTypes.StandardForm, StringComparison.OrdinalIgnoreCase))
            {
                result   = formDataSet.AsUrlEncoded(TextEncoding.Resolve(encoding));
                mimeType = MimeTypes.StandardForm;
            }
            else if (enctype.Equals(MimeTypes.MultipartForm, StringComparison.OrdinalIgnoreCase))
            {
                result   = formDataSet.AsMultipart(TextEncoding.Resolve(encoding));
                mimeType = String.Concat(MimeTypes.MultipartForm, "; boundary=", formDataSet.Boundary);
            }
            else if (enctype.Equals(MimeTypes.Plain, StringComparison.OrdinalIgnoreCase))
            {
                result   = formDataSet.AsPlaintext(TextEncoding.Resolve(encoding));
                mimeType = MimeTypes.Plain;
            }

            _navigationTask = NavigateTo(action, HttpMethod.Post, result, mimeType);
        }
예제 #2
0
        /// <summary>
        /// More information can be found at:
        /// http://www.w3.org/html/wg/drafts/html/master/forms.html#submit-data-post
        /// </summary>
        DocumentRequest PostToData(Url action, IHtmlElement submitter)
        {
            var encoding    = String.IsNullOrEmpty(AcceptCharset) ? Owner.CharacterSet : AcceptCharset;
            var formDataSet = ConstructDataSet(submitter);
            var enctype     = Enctype;
            var result      = String.Empty;
            var stream      = CreateBody(enctype, TextEncoding.Resolve(encoding), formDataSet);

            using (var sr = new StreamReader(stream))
            {
                result = sr.ReadToEnd();
            }

            if (action.Href.Contains("%%%%"))
            {
                result      = TextEncoding.UsAscii.GetBytes(result).UrlEncode();
                action.Href = action.Href.ReplaceFirst("%%%%", result);
            }
            else if (action.Href.Contains("%%"))
            {
                result      = TextEncoding.Utf8.GetBytes(result).UrlEncode();
                action.Href = action.Href.ReplaceFirst("%%", result);
            }

            return(GetActionUrl(action));
        }
예제 #3
0
        /// <summary>
        /// More information can be found at:
        /// http://www.w3.org/html/wg/drafts/html/master/forms.html#submit-mailto-body
        /// </summary>
        void MailAsBody(Url action)
        {
            var formDataSet = ConstructDataSet();
            var enctype     = Enctype;
            var encoding    = TextEncoding.Resolve(UsAscii);
            var body        = String.Empty;

            if (enctype.Equals(MimeTypes.StandardForm, StringComparison.OrdinalIgnoreCase))
            {
                using (var sr = new StreamReader(formDataSet.AsUrlEncoded(encoding)))
                    body = sr.ReadToEnd();
            }
            else if (enctype.Equals(MimeTypes.MultipartForm, StringComparison.OrdinalIgnoreCase))
            {
                using (var sr = new StreamReader(formDataSet.AsMultipart(encoding)))
                    body = sr.ReadToEnd();
            }
            else if (enctype.Equals(MimeTypes.Plain, StringComparison.OrdinalIgnoreCase))
            {
                using (var sr = new StreamReader(formDataSet.AsPlaintext(encoding)))
                    body = sr.ReadToEnd();
            }

            action.Query = "body=" + body.UrlEncode(encoding);
            GetActionUrl(action);
        }
예제 #4
0
 ScriptOptions CreateOptions()
 {
     return(new ScriptOptions(_document)
     {
         Element = _script,
         Encoding = TextEncoding.Resolve(_script.CharacterSet)
     });
 }
예제 #5
0
 ScriptOptions CreateOptions()
 {
     return(new ScriptOptions
     {
         Context = _document.DefaultView,
         Document = _document,
         Element = _script,
         Encoding = TextEncoding.Resolve(_script.CharacterSet)
     });
 }
예제 #6
0
 ScriptOptions CreateOptions()
 {
     return(new ScriptOptions
     {
         Context = Owner.DefaultView,
         Document = Owner,
         Element = this,
         Encoding = TextEncoding.Resolve(CharacterSet)
     });
 }
예제 #7
0
        /// <summary>
        /// More information can be found at:
        /// http://www.w3.org/html/wg/drafts/html/master/forms.html#submit-mutate-action
        /// </summary>
        DocumentRequest MutateActionUrl(Url action, IHtmlElement submitter)
        {
            var encoding    = String.IsNullOrEmpty(AcceptCharset) ? Owner.CharacterSet : AcceptCharset;
            var formDataSet = ConstructDataSet(submitter);
            var result      = formDataSet.AsUrlEncoded(TextEncoding.Resolve(encoding));

            using (var sr = new StreamReader(result))
                action.Query = sr.ReadToEnd();

            return(GetActionUrl(action));
        }
예제 #8
0
        /// <summary>
        /// More information can be found at:
        /// http://www.w3.org/html/wg/drafts/html/master/forms.html#submit-mutate-action
        /// </summary>
        void MutateActionUrl(Url action)
        {
            var encoding    = String.IsNullOrEmpty(AcceptCharset) ? Owner.CharacterSet : AcceptCharset;
            var formDataSet = ConstructDataSet();
            var result      = formDataSet.AsUrlEncoded(TextEncoding.Resolve(encoding));

            using (var sr = new StreamReader(result))
                action.Query = sr.ReadToEnd();

            GetActionUrl(action);
        }
예제 #9
0
        /// <summary>
        /// More information can be found at:
        /// http://www.w3.org/html/wg/drafts/html/master/forms.html#submit-mailto-headers
        /// </summary>
        void MailWithHeaders(Url action)
        {
            var formDataSet = ConstructDataSet();
            var result      = formDataSet.AsUrlEncoded(TextEncoding.Resolve(UsAscii));
            var headers     = String.Empty;

            using (var sr = new StreamReader(result))
                headers = sr.ReadToEnd();

            action.Query = headers.Replace("+", "%20");
            GetActionUrl(action);
        }
예제 #10
0
        ScriptOptions CreateOptions()
        {
            var document = Owner;
            var context  = document != null ? document.DefaultView : null;

            return(new ScriptOptions
            {
                Context = context,
                Document = document,
                Element = this,
                Encoding = TextEncoding.Resolve(CharacterSet)
            });
        }
예제 #11
0
        /// <summary>
        /// Submits the body of the form.
        /// http://www.w3.org/html/wg/drafts/html/master/forms.html#submit-body
        /// </summary>
        DocumentRequest SubmitAsEntityBody(Url target, IHtmlElement submitter)
        {
            var encoding    = String.IsNullOrEmpty(AcceptCharset) ? Owner.CharacterSet : AcceptCharset;
            var formDataSet = ConstructDataSet(submitter);
            var enctype     = Enctype;
            var body        = CreateBody(enctype, TextEncoding.Resolve(encoding), formDataSet);

            if (enctype.Isi(MimeTypeNames.MultipartForm))
            {
                enctype = String.Concat(MimeTypeNames.MultipartForm, "; boundary=", formDataSet.Boundary);
            }

            return(DocumentRequest.Post(target, body, enctype, source: this, referer: Owner.DocumentUri));
        }
예제 #12
0
        /// <summary>
        /// Creates a new set of document options from the given response with
        /// the provided configuration.
        /// </summary>
        /// <param name="response">The response to pass on.</param>
        /// <param name="encoding">The optional default encoding.</param>
        /// <param name="ancestor">The optional import ancestor.</param>
        public CreateDocumentOptions(IResponse response, Encoding encoding = null, IDocument ancestor = null)
        {
            var contentType     = response.GetContentType(MimeTypeNames.Html);
            var charset         = contentType.GetParameter(AttributeNames.Charset);
            var defaultEncoding = encoding ?? Encoding.UTF8;
            var source          = new TextSource(response.Content, defaultEncoding);

            if (!String.IsNullOrEmpty(charset) && TextEncoding.IsSupported(charset))
            {
                source.CurrentEncoding = TextEncoding.Resolve(charset);
            }

            _source      = source;
            _contentType = contentType;
            _response    = response;
            _ancestor    = ancestor;
        }
예제 #13
0
        /// <summary>
        /// Gets the associated encoding, if any.
        /// </summary>
        /// <param name="element">The element to get the encoding from.</param>
        /// <returns>The discovered encoding or null.</returns>
        protected virtual Encoding GetEncoding(IHtmlMetaElement element)
        {
            var charset = element.Charset;

            if (charset != null)
            {
                charset = charset.Trim();

                if (TextEncoding.IsSupported(charset))
                {
                    return(TextEncoding.Resolve(charset));
                }
            }

            var shouldParseContent = element.HttpEquivalent.Isi(HeaderNames.ContentType);

            return(shouldParseContent ? TextEncoding.Parse(element.Content ?? String.Empty) : null);
        }
예제 #14
0
        public Encoding GetEncoding()
        {
            var charset = Charset;

            if (charset != null)
            {
                charset = charset.Trim();

                if (TextEncoding.IsSupported(charset))
                {
                    return(TextEncoding.Resolve(charset));
                }
            }

            var equiv = HttpEquivalent;
            var shouldParseContent = equiv != null && equiv.Isi(HeaderNames.ContentType);

            return(shouldParseContent ? TextEncoding.Parse(Content ?? String.Empty) : null);
        }
예제 #15
0
        void SetEncoding(String charSet)
        {
            if (TextEncoding.IsSupported(charSet))
            {
                var encoding = TextEncoding.Resolve(charSet);

                if (encoding != null)
                {
                    try
                    {
                        _document.Source.CurrentEncoding = encoding;
                    }
                    catch (NotSupportedException)
                    {
                        _currentMode = XmlTreeMode.Initial;
                        _document.ReplaceAll(null, true);
                        _openElements.Clear();
                    }
                }
            }
        }
예제 #16
0
        /// <summary>
        /// Gets the specified charset, if there has been any specified.
        /// </summary>
        /// <returns>The encoding or null.</returns>
        public Encoding GetEncoding()
        {
            var charset = Charset;

            if (charset != null)
            {
                charset = charset.Trim();

                if (TextEncoding.IsSupported(charset))
                {
                    return(TextEncoding.Resolve(charset));
                }
            }

            var equiv = HttpEquivalent;

            if (equiv != null && equiv.Equals(HeaderNames.ContentType, StringComparison.OrdinalIgnoreCase))
            {
                return(TextEncoding.Parse(Content ?? String.Empty));
            }

            return(null);
        }
예제 #17
0
        /// <summary>
        /// More information can be found at:
        /// http://www.w3.org/html/wg/drafts/html/master/forms.html#submit-data-post
        /// </summary>
        void PostToData(Url action)
        {
            var encoding    = String.IsNullOrEmpty(AcceptCharset) ? Owner.CharacterSet : AcceptCharset;
            var formDataSet = ConstructDataSet();
            var enctype     = Enctype;
            var result      = String.Empty;

            if (enctype.Equals(MimeTypes.StandardForm, StringComparison.OrdinalIgnoreCase))
            {
                using (var sr = new StreamReader(formDataSet.AsUrlEncoded(TextEncoding.Resolve(encoding))))
                    result = sr.ReadToEnd();
            }
            else if (enctype.Equals(MimeTypes.MultipartForm, StringComparison.OrdinalIgnoreCase))
            {
                using (var sr = new StreamReader(formDataSet.AsMultipart(TextEncoding.Resolve(encoding))))
                    result = sr.ReadToEnd();
            }
            else if (enctype.Equals(MimeTypes.Plain, StringComparison.OrdinalIgnoreCase))
            {
                using (var sr = new StreamReader(formDataSet.AsPlaintext(TextEncoding.Resolve(encoding))))
                    result = sr.ReadToEnd();
            }

            if (action.Href.Contains("%%%%"))
            {
                result      = result.UrlEncode(TextEncoding.Resolve(UsAscii));
                action.Href = action.Href.ReplaceFirst("%%%%", result);
            }
            else if (action.Href.Contains("%%"))
            {
                result      = result.UrlEncode(TextEncoding.Utf8);
                action.Href = action.Href.ReplaceFirst("%%", result);
            }

            _navigationTask = NavigateTo(action, HttpMethod.Get);
        }
예제 #18
0
        public static Stream CreateBody(this FormDataSet formDataSet, String enctype, String?charset, IHtmlEncoder?htmlEncoder)
        {
            var encoding = TextEncoding.Resolve(charset);

            return(formDataSet.CreateBody(enctype, encoding, htmlEncoder ?? new DefaultHtmlEncoder()));
        }
예제 #19
0
 private ScriptOptions CreateOptions() => new ScriptOptions(_document, _document.Loop)
 {
     Element  = _script,
     Encoding = TextEncoding.Resolve(_script.CharacterSet)
 };
        public static Stream CreateBody(this FormDataSet formDataSet, String enctype, String charset)
        {
            var encoding = TextEncoding.Resolve(charset);

            return(formDataSet.CreateBody(enctype, encoding));
        }