使用c#登录和检索嵌入表单页面中的数据

本文关键字:数据 表单 登录 检索 使用 | 更新日期: 2023-09-27 18:02:19

我对如何去做这个有点困惑,因为我不是真的熟悉网络的东西。我在c#中使用控制台应用程序尝试从密码保护的主页内的页面链接检索值。我使用以下细节

这是我正在尝试的代码:

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("");
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)";
req.Method = "POST";
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
req.Headers.Add("Accept-Language: en-us,en;q=0.5");
req.Headers.Add("Accept-Encoding: gzip,deflate");
req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
req.KeepAlive = true;
req.Headers.Add("Keep-Alive: 300");
req.Referer = "copy from url";
req.ContentType = "application/x-www-form-urlencoded";
String Username = copy from url;
String PassWord = copy from url;
StreamWriter sw = new StreamWriter(req.GetRequestStream());
sw.Write(string.Format("&loginname={0}&password={1}&btnSubmit=Log In&institutioncode=H4V9KLUT45AV&version=2", Username, PassWord));
sw.Close();
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string tmp = reader.ReadToEnd();

然而,当我检查从网页检索到的数据时,它显示如下:

"……由于不活动,您的会话已超时。请登出并relogin。
返回登录页面>'

我猜这是由于一些VIEWSTATE的东西在ASP。网我也猜我可能有一个问题,从链接中检索数据,我将从主页提取,因为它似乎链接只是加载数据到一个框架,而不是重新加载网页。

任何人吗?

使用c#登录和检索嵌入表单页面中的数据

您的表单数据不正确。在一开始移除&后,它为我工作:

sw.Write(string.Format("loginname={0}&password={1}&btnSubmit=Log In&institutioncode=H4V9KLUT45AV&version=2", Username, PassWord));

此外,正如在另一个答案中已经提到的,您需要在对站点的进一步请求中添加返回的ASPSESSIONIDSSRRDRST cookie。

Ok…该网站正在使用cookie,因此,在您登录后,您需要首先检索cookie,以制作另一个WebRequest:

CookieCollection cookiesResponse = new CookieCollection();
if (response != null)
{
    foreach (string cookie in response.Headers["Set-Cookie"].Split(';'))
    {
        string name = cookie.Split('=')[0];
        string value = cookie.Substring(name.Length + 1);
        cookiesResponse.Add(new Cookie(name.Trim(), value.Trim(), path, domain));
    }
}

在您的示例中,cookie包含:ASPSESSIONIDSSRRDRST=FEKODBMDBEIPCLLENCFLFBEA

你必须使用CookieCollection对任何web请求,在你的请求中,你可以设置cookie:

request.CookieContainer = cookiesResponse;

最后,您可以解析响应。您可以使用html标记解析,也可以解析纯文本。