liuyunluoyouyou 2017-07-16 12:58 采纳率: 0%
浏览 520

模拟登录后访问,CookieContainer访问时需要变更的问题。

模拟登录后访问,CookieContainer访问时需要变更的问题。

用C# 做一个模拟 登录网站 访问页面的程序。原本 向被访网站提交post相关 用户密码后,把cookie保存到CookieContainer中,再访问网站页面没问题。后因被访页面 多了一个写入和读取cookie的操作,原container中的cookie内容,在访问中无法变更。导致无法访问 登录后的内容。
不知道我表达的,是否清楚。 代码大致是这样的。

如果登录后保存的cookieContainer,在浏览页面时再次修改或添加,应该就能通过了。
现在情况是,只用登录后保存container去访问被页面,因为被访页面又写入和读取cookie,原container无法变更,而导致浏览页面失败。本人菜鸟,请老师指教,最好有代码了。

比如被访页面加了这个写入和读取cookie的代码。原container就读取失败了。
Response.Cookies["Usert"]["tt"] = "ok";

                if (Request.Cookies["Usert"]["tt"] == "ok")
                {
                   通过;
                }
                else
                {
                   失改;
                }

protected void Button_Cai_Click(object sender, System.EventArgs e)
{
string indata = "username=aabbi&password=123";
string outdata = "";
CookieContainer myCookieContainer = new CookieContainer();
//新建一个CookieContainer来存放Cookie集合
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.xxx.com/login.php?c=login");
//新建一个HttpWebRequest
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
myHttpWebRequest.ContentLength = indata.Length;
myHttpWebRequest.Method = "POST";
// myHttpWebRequest.KeepAlive = false;//---
myHttpWebRequest.CookieContainer = myCookieContainer;
//设置HttpWebRequest的CookieContainer为刚才建立的那个myCookieContainer
Stream myRequestStream = myHttpWebRequest.GetRequestStream();
StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
myStreamWriter.Write(indata);
//把数据写入HttpWebRequest的Request流
myStreamWriter.Close();
myRequestStream.Close();
//关闭打开对象
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
//新建一个HttpWebResponse
myHttpWebResponse.Cookies = myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);
//获取一个包含url的Cookie集合的CookieCollection
Stream myResponseStream = myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));
outdata = myStreamReader.ReadToEnd();
//把数据从HttpWebResponse的Response流中读出
myStreamReader.Close();
myResponseStream.Close();
AddCompNew(i.ToString(), myCookieContainer);

Download("http://www.xxx.com/view/123.htm",myCookieContainer);
}

public static string Download(string URL, CookieContainer myCookieContainer)//UTF-8 gb2312
{
Stream strmPage = null;
StreamReader srPage = null;
string HTML = null;
try
{
HttpWebRequest wrqPage = (HttpWebRequest)WebRequest.Create(URL);//根据制定的URL字符构造一个网络请求
// wrqPage.UserAgent = "Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1)";//设定UserAgent的属性
// wrqPage.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";//设定UserAgent的属性
wrqPage.Method = "get";
wrqPage.CookieContainer = myCookieContainer;//*
WebResponse wrpPage = wrqPage.GetResponse();//获取网络相应
strmPage = wrpPage.GetResponseStream();//获取网络相应的数据流
//srPage = new StreamReader(strmPage, Encoding.GetEncoding("gb2312"));
//将获取的数据流构造为一个StreamReader,用来读取流的内容
srPage = new StreamReader(strmPage, System.Text.Encoding.GetEncoding("gb2312"));//将获取的数据流构造为一个StreamReader,用来读取流的内容
HTML = srPage.ReadToEnd(); //使用StreamReader读取到流的末尾,并将读取的内容存储到HTML变量中
strmPage.Close();
return HTML;
}
catch (Exception)
{
if (strmPage != null)
{
strmPage.Close();
}
return HTML;
}
}

            我没有币,只能谢谢了。
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2018-07-30 16:13
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64