模拟浏览器登陆的基本思路与做法

模拟浏览器登陆的基本思路与做法

   最近在新建的爬虫、自然语言处理群320349384中讨论模拟登陆的比较多,我接到的技术支持客户中关于这块的问题,尤其是共性的思路问题,非常突出,现简单总结如下,希望对这块感兴趣的人们少走弯路。

    模拟登陆, 即指通过程序设计的方式去模拟人为操作浏览器去登陆相关站点的操作过程,从而达到人为操作可以看到的数据的目的。其技术模块总体分为两大块,即一、抓包分析,二、程序模拟实现

   一、抓包分析

      1) 抓包分析工具:各个浏览器有不同的搭配,看个人习惯了。 我比较推荐用IE9及以上+HttpWatch8.5版本及以上。IE9以上的IE Developer可以方便辅助做之后的数据分析是个重要原因。

     2)抓包分析的目的: 通过抓包可以得到人为操作时候的一系列请求,从而得出用户相关操作过程中的关键请求URL轨迹,即请求的URL数据流,从而得到返回的数据流,而返回数据流的正确性,则由请求的URL值和它所协带的参数决定,返回的数据流对了,则一切就ok了。显然URL是在抓包工具中显而易得的,但其参数相对复杂一些。

       URL所携带的参数主要由四部分组成,get、post、http header、cookies这四部分,虽然四者中有包含关系,但其作用相对独立,故分开来说明。 

       get:即URL所携带的get参数,在URL中的第一个问号的后边的键值对。

       post: post参数,一般是在表单form中来提交,可以是input,select等不同的方式,均可以选择Method=Post来提交。

      http header:即头信息,可以包括host、referer、content-type、user agent等,其实cookie值也是设于此处。

      cookies:是我们最终模拟登陆要得到的cookie值,它标志着模拟登陆访问URL方式时,是不是已登陆状态。但有时http                              header中的个别参数,也会在服务器起到限制某用户是否已登陆,如host、referer等,在新浪微博中有这种情况,所以在实际程序请求时应该注意此处。

     总结一下,即抓包分析的目的有三,一是确定关键请求URL的数据流,二是关键请求URL中的各个参数的获取,三是返回的数据流。当然,第三者取决于前二者的正确性。

  

    3)抓包分析的思路实现

           浏览器已有,抓包工具可选择很简单易用的httpwatch,之后即是如何做分析了。过程如下:

          (1) 首先确定哪个cookies是真正我们程序需要的cookies:   因为有很多的cookie值存在于请求的URL中。一般来说该cookies往往存在于用户登陆成功到首页前的前1-2个请求。这个时候只要在抓包工具中拿出这1-2个请求的cookies即可。

 此时,可以写一个测试程序,将这个cookie放入我们程序请求对象的header中的cookie键中作为值,如header.setHeader("cookie","cookie_value"),然后用这个携带cookie参数的对象去请求一个需要登陆的页面login_url,此时通过程序可以得到该login_url返回的数据流,将该数据流放于editplus或notepad++等可以预览web page的文本编辑中,查看网页预览效果,得到的页面如果是登陆后的则说明该cookie是最终的cookie,否则是假的。

          (2) 获取cookies的URL地址:      确定cookies的时候,自然其对应的URL即为最终要请求可以获得最终cookies的url了。

          (3) URL参数的组成:     查看该URL所对应一系列参数,查看这些参数的提交方式,以及这些参数由来,是客户端js生成还是服务器端回传生成,总而言之,要找到这些参数的组成,包括上述中提到的四部分。

         (4) URL参数的由来与关键请求URL轨迹:  URL参数组成已知,就是要追踪这些参数的生成了,这些参数有些是无用的,有些是有用的,可以通过人为的去一眼去掉一些,但多数是需要去通过查看前边的链接找到该参数的产生处或变化或级联变化处,这些处对应的URL地址即构成了请求URL的关键轨迹。

        (5) 得到cookie值串: 由关键轨迹和轨迹URL所携带的参数,即可以得到正确的返回数据流。从而得到cookies。

        (6) 携带cookie值: 模拟请求已登陆后才可以看到的页,自然可以得到已登陆状态的数据。

二、程序模拟实现

     其模拟实现,是完全建立在上一步的抓包分析之上。此时即可以采用一些成熟的网络IO工具,如最为流行的java中httpclient,或是c中的curl等,去顺序模拟关键轨迹并生成相应的携带参数,即可以依次得到cookies和相应的返回数据流,通过htmlparser或是jsoup的解析,即可以得到真正的结构化的信息。

此为近日针对各群友提出的问题一个汇总与解答,希望对后来人有帮助。夜已深,当入眠。

备注:欢迎加入主要维护的爬虫、自然语言处理群,群号为:320349384(转自:http://hi.baidu.com/erliang20088/item/c8fcdad7bdebd5e4c80c3980

原文地址:https://www.cnblogs.com/fengweixin/p/3589518.html