新版知乎模拟登陆

1.Cookie和Session的区别

如果你登录知乎,填写过用户名、密码下次进来的时候不想再填写了,那么你在第一次登录后,服务器就会发送给你的浏览器一个Cookie,Cookie中包含了你的用户名、密码,下次再次发送请求给知乎的时候,浏览器会自动给请求加上Cookie,这样服务器就能知道你是谁。这就是Cookie的机制。

但是这种机制是不安全的,当你本地Cookie被别人获取后,就能直接使用你的账号了。于是出现了session机制:当你第一次以用户名、密码登录知乎时,知乎服务器会自己生成一条Session Id和sesson Value保存在服务器端,同时将Session Id作为Cookie中的一个键值对返回给浏览器,当你第二次请求知乎服务器的时候,请求会自动加上Session Id,那么服务器端收到Session Id后,会在服务器上查询是否有此Session Id,如果查询到,那么就匹配到相应的Session Value,也就是包含用户名密码的部分,这时候服务器就能识别出来你是那个用户了。

明确一点:Session Value中包含的是加密的用户名、密码等用户的Profile,是存放在服务器端,同事每一个Session Id都是有一个有效期的,这两点保证了安全性。

2.Http状态码

code 说明
200 请求被成功处理
301/302 永久重定向/临时重定向
403 没有访问权限
404 灭有对应的资源
500 服务器错误
503 服务器停机或正在维护

3.分析知乎登录

3.1 找到登录请求URL

通过尝试手机号码和邮箱号,分析得出知乎统一登录网址为:https://www.zhihu.com/api/v3/oauth/sign_in

3.2 找到登录时的header部分

:authority: www.zhihu.com
:method: POST
origin: https://www.zhihu.com
referer: https://www.zhihu.com/signup?next=%2F
user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
x-xsrftoken: 405b7e07-d4f5-4b35-8b70-3e129d97a4d8

主要的是找到x-xsrftoken,以前的教程写的都是_xsrf在返回的html中标签中,改版后变化了,我们可以在返回的cookie中找到,所以
首先设置一个header

agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"

header = {
    "HOST": "www.zhihu.com",
    "Referer": "https://www.zhihu.com/",
    "User-Agent": agent,
}

取得_xsrf

def get_xsrf():
    response = session.post("https://www.zhihu.com/signup?next=%2F", headers=header)
return response.cookies['_xsrf']

随后更新header

    header.update({
        "X-Xsrftoken": xsrf
    })

3.3分析请求登录页面的data数据

3.3.1得到请求的data数据格式为下

------WebKitFormBoundary4YUIdOtklYTeomJn
Content-Disposition: form-data; name="client_id"

c3cef7c66a1843f8b3a9e6a1e3160e20
------WebKitFormBoundary4YUIdOtklYTeomJn
Content-Disposition: form-data; name="grant_type"

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值