工具Fiddler/python3
打开Fiddler,清空一下Fidder里面的请求记录
打开app,进行登录,注意Fiddler里的请求变化
在弹出app登录的时候Fiddler里已经有了四个请求,如下:
注意看一下第一个请求的URL中的信息 "login.do?",那需要分析的就是这个请求了
右键这个请求,copy->Headers only,然后把所有请求信息全部拿出来,请求信息如下,在请求的时候已经有了cookie信息,不知道cookie是从哪里生成的 #之后对比的时候发现这个cookie是上一次请求时的cookie(参考上一篇文章 http://www.cnblogs.com/Jacck/p/7704832.html),也就是说有个地方记录的最后的请求cookie信息然后下一次登录还带着这个cookie去请求登录
GET http://xxx.com/account/login.do?userId=xxx&token=xxx HTTP/1.1
Host: xxx.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Safari/537.36
Accept-Encoding: gzip,deflate
Accept-Language: en-us,en
Cookie: xxx
HTTP/1.1 200 OK
Server: nginx/1.2.2
Date: Sat, 21 Oct 2017 07:24:13 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: private
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
Set-Cookie: xxx; path=/; HttpOnly
X-Powered-By: ASP.NET
Content-Encoding: gzip
把请求的url单独拿出来放到浏览器中直接访问,显示信息如下,分析一下浏览器请求详细信息
Fiddler中刚才浏览器的请求在这
右键,Copy->Herders only,把请求信息拿到,如下
GET http://xxx.com/account/login.do?userId=xxx&token=xxx HTTP/1.1 Host: xxx.com Connection: keep-alive Cache-Control: max-age=0 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 Upgrade-Insecure-Requests: 1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.8 Cookie: qgqp_b_id=xxx; st_pvi=xxx; _qddaz=QD.emt8s7.goudx0.j8ubqjuz; pgv_pvi=xxx HTTP/1.1 200 OK Server: nginx/1.2.2 Date: Sat, 21 Oct 2017 07:44:15 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private X-AspNetMvc-Version: 5.2 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Content-Encoding: gzip
对比一下app登录时候的请求信息,还是有些地方不一样,但是除了cookie的请求头都可以直接创建,试着把除cookie信息之外的请求头信息头都设置成一样再次发送请求
python 请求代码如下
import requests url = 'http://xxx.com/account/login.do?userId=xxx&token=xxx' headers={ "Host":"xxx.com", "Connection": "keep-alive", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Safari/537.36", "Accept-Encoding": "gzip,deflate", "Accept-Language": "en-us,en" } r = requests.get(url,headers=headers) print (r.text)
请求结果如下
模拟登录信息失败,所以cookie信息一定要有,而这个cookie去哪里拿呢
试着把Fiddler里面登录成功的那个cookie拿出来带着那个cookie再请求一次#第一次用app登录 Fidder分析的第一个请求,在request headers里面加一个Cookie值,代码就不贴出来了
运行结果如下:
这是怎么回事呢? 带了Cookie也请求不到
去app中点击某个查询去看看他现在的Cookie是什么
app内显示网络不正常刷新了一下,然后去看看Fiddler里发生了什么
请求中又有了一个登陆请求,查看他的cookie是什么
对比了一下 Cookie中多了一个参数名字“ct” #应该是current time的意思吧
返回的时候
Set-Cookie又把一个参数修改掉了“cm”参数