Python语言是由Guido van Rossum大牛在1989年发明,它是当今世界最受欢迎的计算机编程语言之一,也是一门“学了有用、学了能用、学会能久用”的计算生态语言。 为此,CSDN作为国内最大的IT中文社区,特向广大Python爱好者开设了Python学习班,帮助大家在学习的道路上少走弯路,事半功倍。3月29号晚上8点,我们特邀请知名Python技术专家刘志军老师在班级里举行分享活动。
以下为昨晚的分享内容: 前言 文章会按照先原理,再实践的方式来讲解,希望可以做到知其然且知其所以然,读这篇文章前,你需要对 HTTP 协议、 Cookies、跨站请求伪造(CSRF)有一定了解,如果你不太了解这些概念,文末给出了两个链接推荐阅读。 在做爬虫时,有些页面在登录之前,是被禁止抓取的,比如我们查看知乎的话题页面 https://www.zhihu.com/topic 就要求我 们登录。 当提到「登录」时,就不得不提 Cookie 技术,而说起 Cookie 技术时,还得从 HTTP 协议说起。当然在这里我不会把HTTP 从0到1讲一遍,你只需要了解基本的 HTTP 流程是什么就可以了,推荐阅读我之前在公众号「Python之禅」中写的另一篇文章一次完整的HTTP请求过程HTTP 是一种无状态的协议, 协议本身不保留之前的一切请求信息和响应信息,也就是说,对于一个刚刚发送了HTTP 请求的客户端再次发起请求时,服务端并不知道之前访问过。这样设计的理由是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计如此简单。 但是,无状态导致业务处理就变得棘手了,一个简单的例子就是网上购物的时候,当我在一个页面把商品加入购物车的时候,正当我要跳转到支付页面时,如果没有一种机制来保持我的登录状态,那么之前选的商品全部丢失了。 因此,为了在无状态的 HTTP 协议之上维护会话状态,使服务可以知道当前是和哪个客户端打交道,于是Cookie 技术应运而生 ,Cookie 通俗的理解就是服务端分配给客户端的一个标识。 Cookie原理其实也非常简单,总共4个步骤维护HTTP会话。 1. 浏览第一次发起 HTTP 请求时,没有携带任何 Cookie 信息,服务收到请求并返回给浏览的HTTP响应,同时 HTTP 响应包括了一个响应头 Set-Cookie 字段,它的值是要设置的 Cookie。 2. 浏览收到来自服务的 HTTP 响应,响应头中发现有 Set-Cookie 字段,就会将该字段的值保存在内存或者硬盘中。 3. 浏览下次给该服务发送 HTTP 请求时, 会将 Cookie 信息附加在 HTTP 请求的头字段 Cookie 中。 4. 服务收到这个HTTP请求,发现请求头中有Cookie字段, 便知道之前就和这个用户打过交道了。 理解了 Cookie 的基本原理之后,我们就可以尝试用 Python 来实现模拟知乎登录。 用过知乎的都知道,只要提供用户名和密码以及验证码之后即可登录。当然,这只是我们眼中看到的,而背后隐藏的技术细节还需要借助浏览来发觉。现在我们就用 Chrome 来查看当我们填完表单后,点击登录的时候究竟发生了什么?
从浏览的请求可以发现几个关键的信息: 1. 登录的 URL 地址是 https://www.zhihu.com/login/email 2. 登录需要提供的表单数据有4个:用户名(email)、密码(password)、验证码(captcha)、_xsrf。 3. 获取验证码的URL地址是 https://www.zhihu.com/captcha.webp?r=1490690391695 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|