一、开始抓包
首先内,还是打开知乎首页,然后输入账号密码,登陆(记得输错密码)
这样我们就可以看到请求头了(请求头如下)

我们发现有这几个请求头和正常的不一样(红色框中的):
-
content-type: application/x-www-form-urlencoded
表单的编码类型由属性确定content-type。它可以有三个值,
(1) application/x-www-form-urlencoded - 表示URL编码形式。如果content-type未将属性设置为任何值,则这是默认值。
(2) multipart/form-data - 表示Multipart表单。当用户想要上载文件时使用这种类型的表单。
(3) text/plain - HTML5中引入的新表单类型,顾名思义,它只是在没有任何编码的情况下发送数据。
URL编码表单(application/x-www-form-urlencoded ):顾名思义,使用此类表单提交的数据是URL结束的。采取以下形式,
<form action="/urlencoded?firstname=sid&lastname=sloth" method="POST" enctype="application/x-www-form-urlencoded">
<input type="text" name="username" value="sidthesloth"/>
<input type="text" name="password" value="slothsecret"/>
<input type="submit" value="Submit" />
</form>
在这里,可以看到表单是使用POST请求提交给服务器的,这意味着它有一个body。但body是如何格式化的?它是URL编码的。基本上,(name, value)会创建一长串对。每一(name, value)对都通过一个& (ampersand)符号彼此分开,对于每一(name, value)对,name它与value一个= (equals)符号分开,比如说,
key1=value1&key2=value2
如图所示,对于上面的表格是:username=sidthesloth&password=slothsecret

但是,回到我们的网站发现它是:

惊不惊喜?刺不刺激?此时我还相信可以解决它的。
- cookie:这个要注意,登陆前cookie就不为空,说明之前肯定有set-cookie的操作
- x-ab-param:很长的一段,并不知道是什么
- x-sxrftoken 验证参数,估计都在网页源代码能找到
二、开始抓包
cookie:
在登陆之前,就发现cookie的值不为空,说明肯定打开网页后就有set-cookie的操作了,我们想验证的话,先打开一个无痕浏览器(主要是为了把之前的cookie全部清空,避免干扰),然后打开http://zhihu.com,发现有几次set-cookie的动作:


发现登陆时提交的cookie 包含之前被set好的cookie信息。
那我们想要模拟的话,很简单的方法是直接使用requests.session。#Todo
**x-sxrftoken: **
一般这种验证参数都会在网页源代码里面,所以直接查看网页源代码(可是没找到)。还是使用ctrl+shift+f 全局搜索,发现找到了,但是参数是js动态生成的...主要是找到如何加密的,然后使用Python模拟出来。

第一步:下载这个js,格式化(让代码好看一些)
第二步:使用fiddle替换掉原来的js,使用刚刚格式化的js
第三步:慢慢调试,直到找到如何生成的...(charles调试,将本地的js替换掉服务器端的js文件)
大概步骤是这样
但是假如js很渣的话,据说可以直接找到这段加密的js,然后Python执行这段js就可以了。(没有研究,🤷♀️)
对不起,写到最后发现是一个失败的教程。