/// <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); }
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"); } } }