HTTP协议详解:请求方法、状态码、请求头与响应头、Cookie与Session
各位同学好,我是你们的老朋友。今天咱们来聊聊HTTP协议。说实话,这玩意儿是网络爬虫的基石,你搞不懂它,写出来的爬虫就跟没头苍蝇似的。
我记得刚入行那会儿,觉得HTTP协议不就是个传输协议嘛,有啥好学的?结果第一次写爬虫就被反爬了,查了半天才发现是请求头没配好。嗯,从那以后我再也不敢小看它了。
一、HTTP请求方法
HTTP协议定义了多种请求方法,说白了就是告诉服务器「你想干啥」。最常用的有这么几个:
| 方法 | 含义 | 爬虫中的使用场景 |
|---|---|---|
| GET | 获取资源 | 抓取网页、下载文件 |
| POST | 提交数据 | 模拟登录、提交表单 |
| PUT | 更新资源 | 修改数据(较少用) |
| DELETE | 删除资源 | 删除操作(极少用) |
| HEAD | 获取响应头 | 检查链接有效性、获取文件大小 |
我个人习惯,写爬虫时90%的情况只用GET和POST。你想想看,爬虫主要是「读」数据,又不是去改人家数据库。
二、HTTP状态码
状态码是服务器给你的「回执」,告诉你请求结果如何。我把它分成几类:
- 2xx 成功:200 OK 最常见,表示一切正常
- 3xx 重定向:301永久跳转、302临时跳转、304未修改
- 4xx 客户端错误:403禁止访问、404找不到、429请求过多
- 5xx 服务器错误:500内部错误、502网关错误、503服务不可用
重点记忆:爬虫遇到429,说明你爬太快了,得歇会儿。遇到403,大概率是反爬机制触发了。遇到5xx,那是服务器的问题,换个时间再试。
我曾经遇到过一个奇葩网站,不管发什么请求都返回200,但页面内容却是「访问被拒绝」。后来才发现,人家把错误信息藏在了响应体里。所以啊,别光看状态码,还得看响应内容。
三、请求头与响应头
请求头和响应头,说白了就是HTTP的「元数据」。它们携带了关于请求和响应的额外信息。
常用请求头
| 请求头 | 作用 | 爬虫中的配置建议 |
|---|---|---|
| User-Agent | 标识客户端类型 | 伪装成浏览器,别用默认的Python-urllib |
| Referer | 来源页面 | 有些网站会校验这个,记得带上 |
| Cookie | 携带会话信息 | 模拟登录状态时必填 |
| Authorization | 认证信息 | 访问需要登录的API时使用 |
常用响应头
- Content-Type:告诉你是HTML、JSON还是图片
- Set-Cookie:服务器让你保存的Cookie
- Content-Length:响应体大小,单位字节
- Location:重定向时的新地址
四、Cookie与Session
Cookie和Session,这俩经常被搞混。我简单解释一下:
- Cookie:存在你电脑上的小文件,由服务器下发
- Session:存在服务器上的会话数据
说白了,Cookie就是你的「身份证」,Session是服务器那边的「档案」。你每次访问网站,带上Cookie,服务器就知道你是谁了。
在爬虫中,处理Cookie有两种方式:
# 方式一:手动设置Cookie
headers = {
'Cookie': 'session_id=abc123; user_token=xyz789'
}
response = requests.get(url, headers=headers)
# 方式二:使用Session对象自动管理
session = requests.Session()
session.get('https://example.com/login') # 登录后自动保存Cookie
response = session.get('https://example.com/profile') # 自动携带Cookie
我个人强烈推荐第二种方式。你想想看,手动管理Cookie多麻烦,还得解析Set-Cookie头。用Session对象,requests库帮你全搞定了。
五、知识体系总览
说了这么多,咱们用一张图来总结一下HTTP协议的核心知识:
这张图把今天讲的内容串起来了。你看,HTTP协议就四个核心模块:请求方法、状态码、请求头/响应头、Cookie与Session。搞懂这些,写爬虫就顺手多了。
好了,今天就聊到这儿。记住,HTTP协议是爬虫的「语言」,你得学会跟服务器对话。下次写爬虫时,多留意一下请求头和响应头,你会发现很多有意思的东西。
可可精品资料库