【问题标题】:.NET verifying POST request result [closed].NET 验证 POST 请求结果
【发布时间】:2014-01-06 14:42:18
【问题描述】:

我需要我的应用程序使用用户定义的登录名和密码登录网站。虽然发送 POST 数据非常简单,但我无法管理如何检查返回的页面是否显示“登录”或“密码错误”语句。

搜索指定语句的 .html 字符串太慢,比较预设错误页面不起作用,因为页面是动态加载的(具有相同的 url)。

是否有任何用于管理 .html 内容的库?如果必须,我可以使用 java 或 python 以及 c#

【问题讨论】:

  • 跟fiddler审问怎么样?

标签: c# .net web-scraping


【解决方案1】:

吃你的饼干

大多数网站将使用 cookie 跨多个请求跟踪当前用户的会话。发送 POST 请求时,您必须将 cookie 存储附加到 WebRequest,并检查存储以获取登录响应。

每个网站都会以不同的方式实施会话跟踪。因此,没有一种解决方案适合所有情况,但在大多数情况下,您所要做的就是验证 cookie 是否存在于给定名称下。 cookie 包含的内容无关紧要,但是当该 cookie 存在时,您就知道登录成功了。

该 cookie 存储必须用于来自服务器的针对该用户会话的其他请求。因此,无论如何您都可能需要跟踪 cookie。

网站可以使用其他方法来跟踪用户会话,包括 GET 参数中的会话 ID 或使用网络服务器持久连接。

我不知道许多登录用户的网站不使用 cookie 来跟踪用户会话。我先看看那里。

【讨论】:

    【解决方案2】:

    通过脚本登录时出现问题,网站对两种登录结果都返回 200 OK 响应:登录或未登录。因此,您必须解析传入的 html 以获取所需的字符串以验证成功的凭据查看。除非网站提供一些 API,否则没有其他方法。

    解析生成的 HTML 的最佳方法是使用 HTML Agility Pack。我过去使用过它,从页面中获取所需的字符串真是太棒了。

    【讨论】:

      【解决方案3】:

      我做了一些研究,发现正则表达式非常适合我的问题,因为它们易于实现,并且在这种情况下非常快

      如果有人也有这样的问题:

      using System.Text.RegularExpressions;
      
      // .html document returned by page
      string webRequestResponse = getResponse();
      // site error string
      const string REGEX = "Password is not correct.";
      // check if page contain that error
      bool wrongPassword = Regex.IsMatch(webRequestResponse, REGEX);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 2019-09-05
        相关资源
        最近更新 更多