/// <summary>
        /// Requests a Response with the Provided Submission Data.
        /// </summary>
        /// <param name="Browser">Browser used to Request, and Navigate with.</param>
        /// <returns>The Response Message.</returns>
        /// <exception cref="MechanizeBrowserStateException">No Content to Post, can't discern Encoding Type.</exception>
        internal async Task <HttpResponseMessage> RequestAsync(MechanizeBrowser Browser)
        {
            HttpResponseMessage message = null;
            var client = Browser.Client;

            // Creates a POST Request.
            if (Method == "POST")
            {
                if (Data == null)
                {
                    throw new MechanizeBrowserStateException("There was no content to POST");
                }

                // Creates the HttpContent to Post, from the provided Encoding Type.
                var Content =
                    EncodingType == URLEncoded?CreateUrlEncoded() :
                        EncodingType == MultiPart?CreateMultiForm() :
                            null;

                if (Content == null)
                {
                    throw new MechanizeBrowserStateException("Could not discern Encoding Type");
                }

                using (Content)
                {
                    // Posts the Data.
                    message = await client.PostAsync(Address, Content);
                }
            }
            // Creates a GET Request.
            else
            {
                message = await client.GetAsync(CreateGetRequest());
            }

            EvaluatedAddress = message.RequestMessage.RequestUri;
            return(message);
        }
Exemple #2
0
        public static async Task Test()
        {
            using (var browser = new MechanizeBrowser())
            {
                var page = await browser.NavigateAsync("https://www.google.com/");

                if (page.IsHtml)
                {
                    var form       = page.Forms["f"];
                    var queryfield = form.FindControl <ScalarControl>("q");

                    Console.WriteLine("Enter a Google Search Query: ");
                    queryfield.Value = Console.ReadLine();

                    var regsubmit = form.FindControl <SubmitControl>("btnK");

                    // Do you feel lucky, punk?
                    var feelingLucky = form.FindControl <SubmitControl>("btnI");

                    // Well do ya?
                    Console.WriteLine("Feeling lucky? (y/n)");
                    var request = Console.ReadKey();

                    // I gots to know
                    var isFeelingLucky = request.KeyChar == 'y';

                    var submitbutton = isFeelingLucky ? feelingLucky : regsubmit;
                    var newpage      = await form.SubmitForm(submitbutton);

                    if (newpage.IsHtml)
                    {
                        if (isFeelingLucky)
                        {
                            OpenBrowser.Open(newpage.RequestInfo.EvaluatedAddress);
                        }
                        else
                        {
                            var results = newpage.Document.DocumentNode.Descendants.Where(item => item.HasClass("g")).ToList();
                            if (results.Count > 0)
                            {
                                results.RemoveAt(results.Count - 1);                    //remove non-query result
                            }
                            if (results.Any())
                            {
                                Console.WriteLine("\nResults: \n");
                                foreach (var result in results)
                                {
                                    var elements = result.Descendants;
                                    var title    = elements.FirstOrDefault(item => item.HasClass("r"))?.InnerText;

                                    var linkTag = elements.FirstOrDefault(item => item.Name == "cite");
                                    var link    = linkTag?.InnerText;

                                    Console.WriteLine(link != null ? $"{title} ({link})" : title);
                                    Console.WriteLine();
                                }
                            }
                            else
                            {
                                Console.WriteLine("No Results");
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("The Query didn't return valid Html");
                    }
                }
                else
                {
                    Console.WriteLine("The Queried Address is not valid");
                }
            }
        }