Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#HttpClient登录网站并从另一个页面中获取信息_C#_Web Scraping_Dotnet Httpclient_Web Inspector - Fatal编程技术网

使用C#HttpClient登录网站并从另一个页面中获取信息

使用C#HttpClient登录网站并从另一个页面中获取信息,c#,web-scraping,dotnet-httpclient,web-inspector,C#,Web Scraping,Dotnet Httpclient,Web Inspector,我正在尝试使用C#和Chrome Web Inspector登录并检索页面上的一些信息 我不太明白一个人必须用什么样的心理过程来解释来自Web Inspector的信息,以模拟登录,模拟保持会话并导航到下一页以收集信息 有人能给我解释一下或者给我指一个资源吗 目前,我只有一些代码可以获取主页和登录页的内容: public class Morningstar { public async static void Ru4n() { var url = "http://

我正在尝试使用C#和Chrome Web Inspector登录并检索页面上的一些信息

我不太明白一个人必须用什么样的心理过程来解释来自Web Inspector的信息,以模拟登录,模拟保持会话并导航到下一页以收集信息

有人能给我解释一下或者给我指一个资源吗

目前,我只有一些代码可以获取主页和登录页的内容:

public class Morningstar
{
    public async static void Ru4n()
    {
        var url = "http://www.morningstar.com/";
        var httpClient = new HttpClient();

        httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml");
        httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
        httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
        httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");

        var response = await httpClient.GetAsync(new Uri(url));
        response.EnsureSuccessStatusCode();
        using (var responseStream = await response.Content.ReadAsStreamAsync())
        using (var decompressedStream = new GZipStream(responseStream, CompressionMode.Decompress))
        using (var streamReader = new StreamReader(decompressedStream))
        {
            //Console.WriteLine(streamReader.ReadToEnd());
        }

        var loginURL = "https://members.morningstar.com/memberservice/login.aspx";
        response = await httpClient.GetAsync(new Uri(loginURL));
        response.EnsureSuccessStatusCode();
        using (var responseStream = await response.Content.ReadAsStreamAsync())
        using (var streamReader = new StreamReader(responseStream))
        {
            Console.WriteLine(streamReader.ReadToEnd());
        }

    }
编辑:最后,根据穆罕默德的建议,我使用了以下代码:

        ScrapingBrowser browser = new ScrapingBrowser();

        //set UseDefaultCookiesParser as false if a website returns invalid cookies format
        //browser.UseDefaultCookiesParser = false;

        WebPage homePage = browser.NavigateToPage(new Uri("https://members.morningstar.com/memberservice/login.aspx"));

        PageWebForm form = homePage.FindFormById("memberLoginForm");
        form["email_textbox"] = "example@example.com";
        form["pwd_textbox"] = "password";
        form["go_button.x"] = "57";
        form["go_button.y"] = "22";
        form.Method = HttpVerb.Post;
        WebPage resultsPage = form.Submit();

mental is过程是模拟一个人登录网站,一些登录是使用AJAX或传统的POST请求进行的,因此,您需要做的第一件事是像浏览器一样发出请求,在服务器响应中,您将获得cookie、标题和其他信息,您需要使用这些信息来构建新的请求,这是一个有争议的要求

步骤如下:

1) 像浏览器一样,生成一个请求,以向应用程序验证您自己的身份。 2) 检查响应,并保存标题、cookie或其他有用信息,以保持与服务器的会话。 3) 使用从第二步收集的信息向服务器发出另一个请求。 4) 检查响应,并使用数据分析算法或其他方法提取数据

小贴士:


这里您没有使用javascript引擎,一些网站使用javascript来显示图形,或者在DOM文档中执行一些交互。在这种情况下,您可能需要使用WebKit lib wrapper。

心智过程是模拟一个人登录网站,一些登录是使用AJAX或传统的POST请求进行的,因此,您需要做的第一件事是像浏览器一样发出请求,在服务器响应中,您将获得cookie、标题和其他信息,您需要使用该信息来构建一个新请求,这是废弃请求

步骤如下:

1) 像浏览器一样,生成一个请求,以向应用程序验证您自己的身份。 2) 检查响应,并保存标题、cookie或其他有用信息,以保持与服务器的会话。 3) 使用从第二步收集的信息向服务器发出另一个请求。 4) 检查响应,并使用数据分析算法或其他方法提取数据

小贴士:


这里您没有使用javascript引擎,一些网站使用javascript来显示图形,或者在DOM文档中执行一些交互。在这种情况下,您可能需要使用WebKit lib包装器。

您应该模拟网站的登录过程。最简单的方法是通过一些调试器(例如)检查网站

以下是网站的登录请求:

POST https://members.morningstar.com/memberservice/login.aspx?CustId=&CType=&CName=&RememberMe=true&CookieTime= HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: https://members.morningstar.com/memberservice/login.aspx
** omitted **
Cookie: cookies=true; TestCookieExist=Exist; fp=001140581745182496; __utma=172984700.91600904.1405817457.1405817457.1405817457.1; __utmb=172984700.8.10.1405817457; __utmz=172984700.1405817457.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=172984700; ASP.NET_SessionId=b5bpepm3pftgoz55to3ql4me

email_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=omited
当您检查这个时,您将看到一些cookie和表单字段,如“\uuu VIEWSTATE”。您需要此字段的实际值才能登录。您可以使用以下步骤:

  • 发出请求并删除诸如“\uuuLastFocus”、“\uuEventTarget”、“\uuuEventArgument”、“\uuuViewState”、“\uuuEventValidation”等字段;还有饼干
  • 在同一页面上创建一个新的POST请求,使用上一个页面的CookieContainer;使用废弃的字段、用户名和密码构建post字符串。使用MIME类型
    application/x-www-form-urlencoded
    发布
  • 如果成功,请使用Cookie进一步请求保持登录

  • 注意:您可以使用或废弃html。ScrapySharp为表单发布表单和浏览网站提供了易于使用的工具。

    您应该模拟网站的登录过程。最简单的方法是通过一些调试器(例如)检查网站

    以下是网站的登录请求:

    POST https://members.morningstar.com/memberservice/login.aspx?CustId=&CType=&CName=&RememberMe=true&CookieTime= HTTP/1.1
    Accept: text/html, application/xhtml+xml, */*
    Referer: https://members.morningstar.com/memberservice/login.aspx
    ** omitted **
    Cookie: cookies=true; TestCookieExist=Exist; fp=001140581745182496; __utma=172984700.91600904.1405817457.1405817457.1405817457.1; __utmb=172984700.8.10.1405817457; __utmz=172984700.1405817457.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=172984700; ASP.NET_SessionId=b5bpepm3pftgoz55to3ql4me
    
    email_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=omited
    
    当您检查这个时,您将看到一些cookie和表单字段,如“\uuu VIEWSTATE”。您需要此字段的实际值才能登录。您可以使用以下步骤:

  • 发出请求并删除诸如“\uuuLastFocus”、“\uuEventTarget”、“\uuuEventArgument”、“\uuuViewState”、“\uuuEventValidation”等字段;还有饼干
  • 在同一页面上创建一个新的POST请求,使用上一个页面的CookieContainer;使用废弃的字段、用户名和密码构建post字符串。使用MIME类型
    application/x-www-form-urlencoded
    发布
  • 如果成功,请使用Cookie进一步请求保持登录
  • 注意:您可以使用或废弃html。ScrapySharp为表单发布表单和浏览网站提供了易于使用的工具