HTTP协议详解:请求方法、状态码、请求头与响应头、Cookie与Session

各位同学好,我是你们的老朋友。今天咱们来聊聊HTTP协议。说实话,这玩意儿是网络爬虫的基石,你搞不懂它,写出来的爬虫就跟没头苍蝇似的。

我记得刚入行那会儿,觉得HTTP协议不就是个传输协议嘛,有啥好学的?结果第一次写爬虫就被反爬了,查了半天才发现是请求头没配好。嗯,从那以后我再也不敢小看它了。

一、HTTP请求方法

HTTP协议定义了多种请求方法,说白了就是告诉服务器「你想干啥」。最常用的有这么几个:

方法 含义 爬虫中的使用场景
GET 获取资源 抓取网页、下载文件
POST 提交数据 模拟登录、提交表单
PUT 更新资源 修改数据(较少用)
DELETE 删除资源 删除操作(极少用)
HEAD 获取响应头 检查链接有效性、获取文件大小

我个人习惯,写爬虫时90%的情况只用GET和POST。你想想看,爬虫主要是「读」数据,又不是去改人家数据库。

小技巧: 用HEAD方法可以快速检查一个链接是否有效,不用下载整个页面。我在做大规模URL验证时,经常用这个方法来节省带宽。

二、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:重定向时的新地址
避坑指南:我曾经因为没设置User-Agent,被一个网站封了IP。后来我搞了个User-Agent池,每次请求随机换一个,效果立竿见影。记住,默认的Python-User-Agent太显眼了。

四、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库帮你全搞定了。

实战经验:有些网站的Cookie会过期,或者有验证机制。我一般会在爬虫里加个「Cookie刷新」的逻辑,发现请求返回登录页面时,自动重新登录获取新Cookie。

五、知识体系总览

说了这么多,咱们用一张图来总结一下HTTP协议的核心知识:

HTTP协议 请求方法 状态码 请求头/响应头 GET / POST / PUT / DELETE 2xx / 3xx / 4xx / 5xx User-Agent / Cookie / Content-Type Cookie与Session Cookie:客户端存储 Session:服务器存储 爬虫必备:理解HTTP才能写好爬虫

这张图把今天讲的内容串起来了。你看,HTTP协议就四个核心模块:请求方法、状态码、请求头/响应头、Cookie与Session。搞懂这些,写爬虫就顺手多了。

好了,今天就聊到这儿。记住,HTTP协议是爬虫的「语言」,你得学会跟服务器对话。下次写爬虫时,多留意一下请求头和响应头,你会发现很多有意思的东西。

可可精品资料库