欲哭无泪的WebRequest.Create模拟登录session问题

artak artak 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
代码如下,能够登陆login.aspx成功并且获取url2(该页面是有会话的) 的内容,但是
如果我点击url2页面里面的新闻链接,转到它的详细内容页面,就提示未登录了,为什么状态没保存,怎么保存呢?感觉就是登录成功后获取网页内容显示后,会话就消失

Dictionary<string, string> postParams = new Dictionary<string, string>();
postParams.Add("username", userno);
postParams.Add("Password", baseMethod.GetPassword(userno, 2));
postParams.Add("Button1", "Sign in");
string url1 = "http://xxx/login.aspx?Login";
string url2 = "http://xxx/newslist.aspx";
string result = baseMethod.GetAspNetCodeResponseDataFromWebSite(postParams, url1, url2);
System.Web.HttpContext.Current.Response.Write(result);

调用下面的方法
public static string GetAspNetCodeResponseDataFromWebSite(Dictionary<string, string> postParams, string getViewStateAndEventValidationLoginUrl, string getDataUrl)
{
if (postParams == null || postParams.Keys.Count != 3)
{
string errorMessage = "参数中需要包含如下3个信息,缺一不可。用户名(用户名文本框的ID和内容)、密码(密码文本框的ID和内容)、summit按钮(button按钮的ID和Text)";
return errorMessage;
}
try
{
CookieContainer cookieContainer = new CookieContainer();

// 设置打开页面的参数
HttpWebRequest request = WebRequest.Create(getViewStateAndEventValidationLoginUrl) as HttpWebRequest;
//request.Method = "get";
//request.KeepAlive = false;
//cookieContainer = request.CookieContainer;

// 接收返回的页面
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
System.IO.Stream responseStream = response.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.UTF8);
string srcString = reader.ReadToEnd();

// 要提交的字符串数据。格式形如:user=uesr1&password=123
string postString = "";
foreach (KeyValuePair<string, string> de in postParams)
{
//把提交按钮中的中文字符转换成url格式,以防中文或空格等信息
postString += System.Web.HttpUtility.UrlEncode(de.Key.ToString()) + "=" + System.Web.HttpUtility.UrlEncode(de.Value.ToString()) + "&";
}
// 将提交的字符串数据转换成字节数组
byte[] postData = Encoding.ASCII.GetBytes(postString);

// 设置提交的相关参数
request = WebRequest.Create(getViewStateAndEventValidationLoginUrl) as HttpWebRequest;
request.Method = "POST";
request.KeepAlive = false;
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = cookieContainer;
request.ContentLength = postData.Length;

// 提交请求数据
System.IO.Stream outputStream = request.GetRequestStream();
outputStream.Write(postData, 0, postData.Length);
outputStream.Close();

// 接收返回的页面
response = request.GetResponse() as HttpWebResponse;
responseStream = response.GetResponseStream();
reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("GB2312"));
srcString = reader.ReadToEnd();

///////////////////////////////////////////////////
// 3.打开需要抓取数据的页面
///////////////////////////////////////////////////
// 设置打开页面的参数
request = WebRequest.Create(getDataUrl) as HttpWebRequest;
request.Method = "get";
request.KeepAlive = false;
request.CookieContainer = cookieContainer;


// 接收返回的页面
response = request.GetResponse() as HttpWebResponse;
responseStream = response.GetResponseStream();
reader = new System.IO.StreamReader(responseStream, Encoding.UTF8);
srcString = reader.ReadToEnd();
return srcString;
///////////////////////////////////////////////////
// 4.分析返回的页面
///////////////////////////////////////////////////
}
catch (WebException we)
{
string msg = we.Message;
return msg;
}
}
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
artak
.NET社区 62,272 成员 668,968 内容