.NET验证POST请求结果

时间:2014-01-06 14:42:18

标签: c# .net web-scraping

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

搜索指定语句的.html字符串太慢,并且比较预先安装的错误页面无效,因为页面是动态加载的(使用相同的URL)。

是否有用于管理.html内容的lib?如果我不得不

,我可以使用java或python以及c#

3 个答案:

答案 0 :(得分:3)

吃饼干

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

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

该cookie存储必须用于服务器对该用户会话的其他请求。因此,您可能还需要跟踪Cookie。

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

我不知道很多网站都记录用户不使用cookie来跟踪用户会话。我先看看那里。

答案 1 :(得分:0)

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

解析生成的HTML的最佳方法是使用HTML Agility Pack。我过去曾经使用它,从页面中获取所需的字符串是一个爆炸。

答案 2 :(得分:0)

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

如果有人也会遇到这样的问题:

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);