使用C#HttpClient登录网站并从其他页面抓取信息我正在尝试使用C#和ChromeWebInspector来登录http://www.morningstar.com并在页面http://financials.morningstar.com/income-statement/is.html?t=BTDPF®ion=usa&culture=en-US上检索一些信息。我不太明白,必须使用什么心理过程来解释WebInspector中的信息来模拟登录并模拟保持会话并导航到下一页以收集信息。有人可以解释或指向资源吗?目前,我只有一些代码来获取主页和登录页面的内容:varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.TryAddWithoutValidation("接受","text/html,application/xhtml+xml,application/xml");httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding","gzip,deflate");httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent","Mozilla/5.0(WindowsNT6.2;WOW64;rv:19.0)Gecko/20100101Firefox/19.0");httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset","ISO-8859-1");varresponse=awaithttpClient.GetAsync(newUri(url));响应.EnsureSuccessStatusCode();使用(varresponseStream=awaitresponse.Content.ReadAsStreamAsync())使用(vardecompressedStream=newGZipStream(responseStream,CompressionMode.Decompress))使用(varstreamReader=newStreamReader(decompressedStream)){//缺点ole.WriteLine(streamReader.ReadToEnd());}varloginURL="https://members.morningstar.com/memberservice/login.aspx";response=awaithttpClient.GetAsync(newUri(loginURL));响应.EnsureSuccessStatusCode();使用(varresponseStream=awaitresponse.Content.ReadAsStreamAsync())使用(varstreamReader=newStreamReader(responseStream)){Console.WriteLine(streamReader.ReadToEnd());}}编辑:最后,根据穆罕默德的建议,我使用了以下代码:ScrapingBrowserbrowser=newScrapingBrowser();//如果网站返回无效的cookie格式,则将UseDefaultCookiesParser设置为false//browser.UseDefaultCookiesParser=false;网页主页=browser.NavigateToPage(newUri("https://members.morningstar.com/memberservice/login.aspx"));PageWebFormform=homePage.FindFormById("memberLoginForm");形式[“email_textbox”]=“example@example.com”;表单["pwd_textbox"]="密码";形式["go_button.x"]="57";形式["go_button.y"]="22";form.Method=HttpVerb.Post;网页resultsPage=form.提交();您应该模拟网站的登录过程最简单的方法是通过一些调试器(例如Fiddler)检查网站。这是网站的登录请求:POSThttps://members.morningstar.com/memberservice/login.aspx?CustId=&CType=&CName=&RememberMe=true&CookieTime=HTTP/1.1Accept:text/html,application/xhtml+xml,*/*Referer:https://members.morningstar.com/memberservice/login.aspx**省略**Cookie:cookies=true;TestCookieExist=存在;fp=001140581745182496;__utma=172984700.91600904.1405817457.1405817457.1405817457.1;__utmb=172984700.8。10.1405817457;__utmz=172984700.1405817457.1.1.utmcsr=(直接)|utmccn=(直接)|utmcmd=(无);__utmc=172984700;ASP.NET_SessionId=b5bpepm3pftgoz55to3ql4meemail_textbox=test@email.com&pwd_textbox=password&remember=on&email_textbox2=&go_button.x=36&go_button.y=16&__LASTFOCUS=&__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=omitted&__EVENTVALIDATION=omitted当检查时,你会看到一些cookie和__EVENTVALIDATION=omitted字段”。您需要此字段的实际值才能登录。您可以使用以下步骤:发出请求并丢弃诸如“__LASTFOCUS”、“__EVENTTARGET”、“__EVENTARGUMENT”、“___JSTENT”、“__EVVALIDATION”之类的字段;和饼干。使用上一个页面中的CookieContainer在同一页面上创建一个新的POST请求;使用废弃的字段、用户名和密码构建帖子字符串。使用MIME类型application/x-www-form-urlencoded。如果成功,cookie将用于进一步请求以保持登录状态。注意:您可以使用htmlagilitypack或scrapysharp来抓取html。ScrapySharp为表单发布表单和浏览网站提供了易于使用的工具。心理过程是模拟一个人登录网站,有些登录是使用AJAX或传统的POST请求,所以,你做的第一件事就是从浏览器发出这样的请求,在服务器响应中,你会获取构建新请求所需的cookie、标头和其他信息,这是一个冗长的请求。这些步骤是:1)像浏览器一样构建请求以向应用程序验证自身。2)检查响应,并保存标头、cookie或其他有用的信息以保持与服务器的会话。3)使用从第二步收集的信息向服务器发出另一个请求。4)检查响应并使用数据分析算法或其他东西来提取数据。提示:您在这里没有使用javascript引擎,一些网站使用javascript来显示图形,或者在DOM文档中执行一些交互。在这种情况下,您可能需要使用WebKit库包装器。以上就是C#学习教程:使用C#HttpClient登录网站,从另一个页面抓取信息分享的所有内容。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处: