上一篇文章中我们讲了,如何采用程序模拟登录网站,并获取登录后网站的内容,今天在此基础上继续将,通过程序登录了网站后而直接进入登录后的页面。

首先还是发起一个启用一个web会话,然后发送模拟数据请求,获取会话的CooKie,再根据该CooKie将其写入到本地,通过程序直接打开登录后的页面。

该功能可用于无法修改第三方系统源代码而要做系统单点登录。

我们先在HTMLHelper类中添加一个方法:

View Code

 1 /// <summary> 2 /// 获取CookieCollection 3 /// </summary> 4 /// <param name="loginUrl"></param> 5 /// <param name="postdata"></param> 6 /// <param name="header"></param> 7 /// <returns></returns> 8        public static CookieCollection GetCookieCollection(string loginUrl, string postdata, HttpHeader header) 9        {10            HttpWebRequest request = null;11            HttpWebResponse response = null;12            try13            {14                CookieContainer cc = new CookieContainer();15                request = (HttpWebRequest)WebRequest.Create(loginUrl);16                request.Method = header.method;17                request.ContentType = header.contentType;18                byte[] postdatabyte = Encoding.UTF8.GetBytes(postdata);19                request.ContentLength = postdatabyte.Length;20                request.AllowAutoRedirect = false;21                request.CookieContainer = cc;22                request.KeepAlive = true;23 24                //提交请求25                Stream stream;26                stream = request.GetRequestStream();27                stream.Write(postdatabyte, 0, postdatabyte.Length);28                stream.Close();29 30                //接收响应31                response = (HttpWebResponse)request.GetResponse();32                response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);33 34                CookieCollection cook = response.Cookies;35                //Cookie字符串格式36                string strcrook = request.CookieContainer.GetCookieHeader(request.RequestUri);37 38                return cook;39            }40            catch (Exception ex)41            {42 43                throw ex;44            }45        }

再根据获取的CookieCollection写入本地,并打开登录后的页面

View Code

 1   [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 2  3         public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData); 4  5  6   HttpHeader header = new HttpHeader(); 7                 header.accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*"; 8                 header.contentType = "application/x-www-form-urlencoded"; 9                 header.method = "POST";10                 header.userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";11                 header.maxTry = 300;12 13 14  CookieCollection mycookie = HTMLHelper.GetCookieCollection("http://www.renren.com/PLogin.do",15                     "email=aaa%40163.com&password=111&icode=&origURL=http%3A%2F%2Fwww.renren.com%2Fhome&domain=renren.com&key_id=1&_rtk=90484476", header);16 17 18  foreach (Cookie cookie in mycookie) //将cookie设置为浏览的cookie  19                 {20 21                     InternetSetCookie(22 23                          "http://" + cookie.Domain.ToString(),24 25                          cookie.Name.ToString(),26 27                          cookie.Value.ToString() + ";expires=Sun,22-Feb-2099 00:00:00 GMT");28 29                 }30                 System.Diagnostics.Process.Start("http://guide.renren.com/guide");

这样即可直接通过程序打开登录后的页面:

转载于:https://www.cnblogs.com/hoholuo/archive/2011/12/20/2295014.html

使用C#的HttpWebRequest模拟登陆网站(续)相关推荐

  1. 使用C#的HttpWebRequest模拟登陆网站

    很久没有写新的东西了,今天在工作中遇到的一个问题,感觉很有用,有种想记下来的冲动. 这篇文章是有关模拟登录网站方面的. 实现步骤: 启用一个web会话 发送模拟数据请求(POST或者GET) 获取会话 ...

  2. winform模拟登陆网页_【教程】模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)...

    之前已经介绍过了网络相关的一些基础知识了: 以及简单的网页内容抓取,用C#是如何实现的: 现在接着来介绍,以模拟登陆百度首页: 为例,说明如何通过C#模拟登陆网站. 不过,此处需要介绍一下此文前提: ...

  3. 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程

    声明:本文章转载自crifan的技术人生 [教程]手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程 重要提示: 1.此贴,以后不再更新: 2.想要看更新的内容,请移 ...

  4. C# 利用HttpWebRequest模拟登陆获取数据设置Accept-Encoding为gzip,deflate后返回的网页是乱码处理

    原由:在解决模拟登陆抓取数据的时候post一个地址时老是获取的内容是乱码. 经过检查最终应该是编码是HttpWebRequest.Headers.Add("Accept-Encoding&q ...

  5. 使用htmlUnit模拟登陆网站(有验证码和无验证码)

    最近在学习模拟登陆,本来想使用httpClient抓取数据,但是奈何不会.在机缘巧合下看到了HtmlUnit废话不多说. 上代码. 需要的jar包: 主要的jar包是htmlUnit.jar,可在官网 ...

  6. java 模拟平台_用Java程序模拟登陆网站平台

    由于想测试性能,想模拟多个用户同时登陆系统进行访问,于是写了一个例子. 代码如下: URL url = null; HttpURLConnection httpurlconnection = null ...

  7. 如何HttpWebRequest模拟登陆,获取服务端返回Cookie以便登录请求后使用

    public static string GetCookie(string requestUrlString, Encoding encoding, ref CookieContainer cooki ...

  8. php 模拟登陆网站抢票,【附源码】程序员做的这款抢票神器,在GitHub火了

    最近临近国庆节,大家都是归心似箭的「其实都是一批想出去的玩的」.但是一碰到这种节假日,买票就是贼难买的,况且是这种七天长假,宅在家里没事做,出去玩是必然的. 买不到票了咋办,抢票呗.以前还要手动抢,从 ...

  9. python 2.7 简单模拟登陆网站

    举个栗子,首先创建网络会话, 然后就可以用创建的session来访问网页了. session.get(URL) #-*- coding:utf-8 -*- import requests import ...

最新文章

  1. 12th,Jan 研究生创新项目申报成功
  2. js canvas游戏初级demo-上下左右移动
  3. 用质因子去分解质因数
  4. 解决依赖资源同名的问题
  5. A 元素[HTML 4.01]
  6. 华为交换机 路由器 常用命令
  7. Centos7.0系统下Rsync+sersync实现多文件数据实时增量同步
  8. Win7无法正常使用TTS语音的解决办法
  9. 四阶龙格库塔法(Runge-Kutta)求解常微分方程的 Matlab程序及案例
  10. 计算机硬盘数据存满如何开机,清理磁盘方法 让电脑开机速度加快(3-1)
  11. office转换为还原度高的html,使用Aspose把office文件转换为Html文件及生成文件浏览乱码的解决...
  12. 计算机保存文件快捷键,保存快捷键是什么,保存文档的快捷键
  13. java语音识别毕业设计,HMM的语音识别技术的毕业设计
  14. FAN73893MX 350mA-650mA 高压600V 用于高压、高速驱动 MOSFET和IGBT 三相半桥栅极驱动 IC
  15. 实用的电脑快捷键技巧,赶紧收藏!
  16. 修改xcode字体大小(Mac)
  17. php登陆界面点登陆没有反应,ThinkPHP5实战的登录界面的登陆按钮点击之后没有任何反应怎么解决?...
  18. Android UI 设计工具
  19. JS 地址截取 省市区 (含自治区,直辖市,县,自治县)
  20. 股票质押式回购交易是利好还是利空

热门文章

  1. node:express:error---填坑之路
  2. H5案例分享:移动端滑屏 touch事件
  3. time时间格式输出转换
  4. 第一周作业--软件过程与项目管理
  5. ylbtech-LanguageSamples-SimpleVariance
  6. 语音识别基础,总有一天你会用到
  7. 简易版用户画像,你需要掌握这3个数据处理方法
  8. 三点钟群分享:全球虚拟礼物赠送平台项目落地经验
  9. 对产品经理而言,有一种灾难叫“老板说”
  10. 大连a货翡翠,东莞a货翡翠