今天咱们讨论SuperWebClient组件使用中的几个简单主题javascript
1: UserAgent
2: Cookies
3: POST登陆
1:UserAgent
这个是客户端标识信息,此信息是用于鉴别正在访问WEB服务的客户端的类型,下面咱们经过抓包工具Fiddler,来获取几个典型浏览器
的此项信息是怎么样的. Fiddler是一个.NET的开源HTTP/HTTPS协议分析软件,后来被收购后就没开源了好像。
Fiddler 下载地址 http://www.telerik.com/fiddler,运行后以下所示php
首先咱们打开IE浏览器-输入博客园网站,就会看到Fiddler抓到不少数据包,咱们选取首页的那条就能够查看具体的http 请求信息java
咱们能够知晓IE浏览器的userAgent信息以下
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
(机器上IE版本和安装的软件不同,USER-AGENT也会有些许差别)
咱们在看基于谷歌CHROME浏览器的相似下面
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.48 Safari/537.36
还有众多猎豹,火狐,遨游和其它都有本身的一些附加信息在User-Agent中,那这个东西可能会有哪些用途了。
通常而言,WEB服务器并不看重这个信息,但有些也会检查,并根据不一样的客户端给出适当的输出反馈,另外就是客户端JS脚本会根据
这个信息作些兼容性的检查和调整。
对于爬虫好比百度,谷歌或其它都有本身独特的userAgent信息,SuperWebClient默认模拟的是IE浏览器的,固然,你彻底能够设置
模拟任何信息,好比下面这样 SuperWebClient 应用代码示例以下
注意代码红色区域的部分,原本是做为后面的主题来讨论的,如今是为了演示如何用FIDDLER抓取到SuperWebClient的请求包才会提早标注下
默认是模拟的IE浏览器的,下面我修改这个User-Agent信息为 “i-love-you”json
// 代理设置-否则FIDDLER是没法抓取到的
hi.EnableProxy = true;
hi.ProxyIP = "127.0.0.1";
hi.ProxyPort = 8888;
hi.UserAgent = "i-love-you";
// 接下来就是设置访问的URL,和其它譬如UserAgent,Cookies,Proxy....等等各类特性的设置
// 通常,咱们就设置Url 访问路径,其它都是在有须要的时候设置就能够了浏览器
你能够根据须要假装成任何须要的,好比微信,陌陌啥的特有的信息。
2:Cookie
SuperWebClient 默认处理WEB服务器发送来的COOKIE,无需你本身大费脑筋,那从服务器发来的COOKIE信息怎么读取呢服务器
HttpOutput ho = HttpManager.Instance.ProcessRequest(hi); if (ho.IsOK) { richTextBox2.Text = ho.Cookies; // 若是HO的标志IsOK成立,则页面访问是成功的,不然就是页面访问失败 // 遇到失败-你能够本身作后续处理,好比重发起请求或是写LOG richTextBox1.Text = ho.TxtData; }
在输出对象的ho.Cookies属性里面哦。
好比访问C#蚁工窝 http://www.csharpworker.com/微信
拿到的cookies是
hTQ9_2132_pc_size_c=0;hTQ9_2132_onlineusernum=2;hTQ9_2132_lastact=1488261049%09forum.php%09;hTQ9_2132_sid=mRojS6;hTQ9_2132_lastvisit=1488257449;hTQ9_2132_saltkey=p7EgLlZg;
WEB服务器会在不一样的请求屡次发送不一样的cookies, SuperWebClient的输出对象httpoutput只是当次请求时的服务器发送COOKIES信息,不会累计,虽然SuperWebClient内部会累计全部从服务器发送的COOKIE并在向服务器提交时一并回传回去,可是目前并无提供读取全部累计COOKIE的方法,你能够本身收集每次请求的反馈对象httpoutput中的COOKIES信息,通常而言,我不怎么理会这个东西,除非你是要保存COOKIES另作它用。
3:POST登陆
通常状况下,如无心外,WEB服务的不少操做请求都是基于POST协议的,AJAX也是,极少是基于GET协议的,由于请求字符串是有长度限制的
大量的参数须要经过POST来发送,接下来,咱们看看SuperWebClient如何经过POST方式来登陆一个网站,在展现以前,咱们有必要分析网站登陆
的请求协议,而后使用SuperWebClient进行模拟。
咱们就以登陆博客园的过程来讲明下,首先咱们用Fiddler进行抓取博客园的登陆协议,注意,若是你抓取不到博客园的登陆协议,请看以下2个FIDDLER中针对的两个最多见的问题,由于博客园登陆是采用的HTTPS,因此须要开启FIDDLER中相应的HTTPS解码选项。
点击FIDDLER菜单的 TOOL->TERERIK FIDDLER OPTIONScookie
若是你遇到能够抓取,可是发现没法解码的状况,那就是你的证书问题,证书问题-能够参阅http://blog.csdn.net/chjqxxxx/article/details/53666175 这里-从新构建证书-问题就会解决
这里是博客园的登陆协议app
POST https://passport.cnblogs.com/user/signin HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: zh-cn
Referer: https://passport.cnblogs.com/user/signin?ReturnUrl=http%3A%2F%2Fwww.cnblogs.com%2F
Accept: application/json, text/javascript, */*; q=0.01
verificationtoken: _Q9B84azUZnUTIffmygxm8pONeAnXanp7gw7sqep3b3Lqk-opvj5wPgeAN6SM6lN1qFi6y8-36GAyjMDYYBuf_cy6iE1:fmSuVFj_iIGBnMV7N3TydHUuc8ORlIkNw7eSCsGqwV2BX7lM64bNoMV0X3S-t2-rlDcBpfuYnK3_In_fMNTFaPhE3Cw1
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Host: passport.cnblogs.com
Content-Length: 386
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: Hm_lvt_cc17b07fc9529e3d80b4482c9ce09086=1482645471; _ga=GA1.2.806287383.1482645352; __gads=ID=cde93307386572b7:T=1488262791:S=ALNI_MbB1oiDaPhuYt-REwWv3uYFQG8-AA; AspxAutoDetectCookieSupport=1; SERVERID=227b087667da6f8e99a1165002db93f6|1488285061|1488285061
{"input1":"a9Q+6M4EwC0HlHafyL8GYvd5zcFP+tUMV+F2P+aF0FdzrtY9nqPdkjCDctPQlY37EI/VzpLc9z+SAKXaWpWa0yDUM3USN+b7W+m6t7p8qRS+nuHu1G6wJ34IyuAruQ5gE3+r30PKy65q9dD0F5ruOSZizIYgCvm2/WrQfQsdYiQ=","input2":"fGOIEUEG5HP6tt3c/q9z0DuLyc9qeq0GiJQyTGNhTL/sCriRomR2G8gtn+AurDFzH/dDzMOYrBfEJ97n454gg8Ppd5cRe3qaNBTPebCJrIK3chv/Mupe+liFvEu6MwOgPqFBRm6GQCSZBHaVfRpHBKYrQkEaWRZ6ItSjKCBKpQc=","remember":false}
帐号和密码都是通过加密处理的,至于加密过程,你须要仔细分析博客园的JS代码,这里咱们仅仅是用来讲明如何使用SuperWebClient进行
POST表单登陆,因此对于帐号,密码的加密分析略过,若是后面特别有空闲,我会补充一篇文章分析博客园的帐号,密码加密,主要是对相关
JS代码的调试和分析。
那么使用 SuperWebClient如何进行博客园登陆了。很简单。ide
HttpInput hi = new HttpInput(); HttpManager.Instance.InitWebClient(hi, true, 60, 60); // 这里设置博客园登陆URL hi.Url = "https://passport.cnblogs.com/user/signin"; hi.Refer = "https://passport.cnblogs.com/user/signin?ReturnUrl=http%3A%2F%2Fwww.cnblogs.com%2F"; // 咱们伪造下来路,证实咱们是从哪里来的,根据协议 // POST数据 hi.PostData = "input1=a9Q+6M4EwC0HlHafyL8GYvd5zcFP+tUMV+F2P+aF0FdzrtY9nqPdkjCDctPQlY37EI/Vzp" +"Lc9z+SAKXaWpWa0yDUM3USN+b7W+m6t7p8qRS+nuHu1G6wJ34IyuAruQ5gE3+r30PKy65q9dD0F5ruOSZizIYgCvm2/WrQfQsdYiQ=" +"&input2=fGOIEUEG5HP6tt3c/q9z0DuLyc9qeq0GiJQyTGNhTL/sCriRomR2G8gtn+AurDFzH/dDzMOYrBfEJ97n454gg8Ppd5cRe3qa" +"NBTPebCJrIK3chv/Mupe+liFvEu6MwOgPqFBRm6GQCSZBHaVfRpHBKYrQkEaWRZ6ItSjKCBKpQc=" +"&remember=false"; HttpOutput ho = HttpManager.Instance.ProcessRequest(hi); if (ho.IsOK) { richTextBox1.Text = ho.TxtData; } else { richTextBox1.Text = "页面访问错误"; } // 最后销毁对象 hi.Dispose();
hi.PostData="设置POST表单数据" 格式是: key1=value1&key2=value2.....依次若干今天的主题分享完了,有了今天的一些东西,你已经能处理大部分的模拟请求,SuperWebClient的大部分功能也是围绕目前的GET,POST服务。