关于HttpWebResponse里拿不到Set-Cookie的问题

寒假开始的时候开始学C#,然后就试着用C#写个自动登入学校urp网站的程序,这样出了成绩直接发邮件告诉我,我就不用自己去一遍一遍登入查看了(听华科的同学说华科就是发邮件通知的,真人性化)

发邮件的话用System.Web.Mail.MailMessage mailmsg = new MailMessage();C#的话还要记得在项目的引用里添加程序集。

给mailmsg填写发件人的账号密码的时候要这么写:

mailmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
mailmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "username");
mailmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "password");

其它都比较好理解。

最后再设定邮件服务器并发送:就发送出去了。

SmtpMail.SmtpServer = "smtp.163.com";
SmtpMail.Send(mailmsg);

自动登入是用HttpWebRequest,具体方法可以参考http://blog.csdn.net/zhoufoxcn/article/details/6404236

但是用上述方法对于有些网站会有一些问题,我碰到的主要是两方面。

1.一些网站会根据HttpWebRequest的referer来防止盗链,所以需要添加这么一条:

if (!string.IsNullOrEmpty(refer)) request.Referer = refer;

2.网站是根据cookie来确定用户身份的话,登陆页面之后响应头里会拿到一个Set-Cookie,但是有时候明明已经登入了,响应头里的Set-Cookie却是空的。这是因为网页请求自动跳转了,返回的响应是跳转之后的响应,那时已经不需要返回Set-Cookie了。一个简单的解决办法是在request里禁用自动跳转:

request.AllowAutoRedirect = false;

拿到响应流之后,需要获取什么信息,用正则表达式去匹配一下就好了。


你可能感兴趣的:(C#)