模拟登陆知乎

一、开始抓包

首先内,还是打开知乎首页,然后输入账号密码,登陆(记得输错密码)

这样我们就可以看到请求头了(请求头如下)

抓包到的请求头

我们发现有这几个请求头和正常的不一样(红色框中的):

  1. 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

此处Form Data是提交的表单

但是,回到我们的网站发现它是:
乱码?!

惊不惊喜?刺不刺激?此时我还相信可以解决它的。

  1. cookie:这个要注意,登陆前cookie就不为空,说明之前肯定有set-cookie的操作
  2. x-ab-param:很长的一段,并不知道是什么
  3. 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模拟出来。
image.png

第一步:下载这个js,格式化(让代码好看一些)

第二步:使用fiddle替换掉原来的js,使用刚刚格式化的js

第三步:慢慢调试,直到找到如何生成的...(charles调试,将本地的js替换掉服务器端的js文件)
大概步骤是这样
但是假如js很渣的话,据说可以直接找到这段加密的js,然后Python执行这段js就可以了。(没有研究,🤷‍♀️)


对不起,写到最后发现是一个失败的教程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容