3.每天进步一点点-Python爬虫需要了解HTTP 请求报文

14天学习训练营导师课程:
杨鑫《Python 自学编程基础》
杨鑫《 Python 网络爬虫基础》
杨鑫《 Scrapy 爬虫框架实战和项目管理》

1.HTTP 请求报文

​ HTTP(Hyper Text Transfer Protocol,超文本传输协议)是万维网服务器将超文本传输 到本地浏览器的传送协议,基于 TCP/IP 通信协议来传递数据。HTTP 是无状态的,以此限 制每次连接只处理一个请求。服务器在处理完客户端请求,并接收到客户端的应答后,即断开连接,这种方式的好处是节省传输时间。

​ 当然,如果想保持连接,可以在请求首部字段中添加请求头 Connection: keep-alive,表 明使用持久连接,或者通过 Cookie 这类方式间接地保存用户之前的 HTTP 通信状态。

​ HTTP 请求报文由四部分组成,依次是请求行请求头空行请求正文。下面依次 对这四部分进行介绍。

1.1 请求行

请求行它由请求方法、URL 和 HTTP 版本三个字段组成,使用空格进行分隔。

比如访问百度, 请求行的内容为 如下。 HTTP/1.1 定义了八种请求方法,具体描述如表 1.1 所示

在这里插入图片描述

八种请求方法

方法描述
GET请求指定页面,并返回页面内容
POST一般用于提交表单或上传数据,数据被包含在请求体中
PUT客户端向服务器发送数据,以取代指定文档内容
DELETE请求服务器删除指定页面
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
HEAD类似于 GET 请求,只是返回的响应无具体内容,一般用于获取报头
OPTIONS允许客户端查看服务器的性能
TRACE回显服务器收到的请求,一般用于测试或诊断

常见的请求头

请求头解释示例
Accept指定客户端能够接收的内容类型Accept:text/plain, text/html
Accept-Charset浏览器可以接收的字符编码集Accept-Charset:iso-8859-5
Accept-Encoding指定浏览器可以支持的 Web 服务器返回内容 的压缩编码类型Accept-Encoding:compress, gzip
Accept-Language浏览器可接收的语言Accept-Language:en,zh
Accept-Ranges可以请求网页实体的一个或多个子范围字段Accept-Ranges:bytes
AuthorizationHTTP 授权的授权证书Authorization:BasicQWxhZGRpbjpvcGVuIHNlc2FTZQ==
Cache-Control指定请求和响应遵循的缓存机制Cache-Control:no-cache
Connection表示是否需要持久连接(HTTP 1.1 默认进行 持久连接)Connection:close
CookieHTTP 请求发送时,会把保存在该请求域名下 的所有 Cookie 值一起发送给 Web 服务器Cookie:$Version=1; Skin=new;
Content-Length请求的内容长度Content-Length:348
Content-Type请求的与实体对应的 MIME 信息Content-Type:application/x-www-form-urlencoded
Date请求发送的日期和时间Date:Tue, 15 Nov 2010 08:12:31 GMT
Expect请求的特定的服务器行为Expect:100-continue
From发出请求的用户的 E-mailFrom:user@email.com
Host指定请求的服务器的域名和端口号Host:www.zcmhi.com
If-Match只有请求内容与实体相匹配才有效If-Match: "737060cd8c284d8af7ad3082f209582d“
If-Modified-Since如果请求的部分在指定时间之后被修改,则请 求成功;否则,返回 304 代码If-Modified-Since:Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match如果内容未改变,返回 304 代码,参数为服务 器先前发送的 Etag,通过与服务器回应的 Etag 比较判断是否改变If-None-Match:“737060cd8c284d8af7ad3082 f209582d”
If-Range如果实体未改变,服务器发送客户端丢失的部 分;否则,发送整个实体,参数也为 EtagIf-Range:"737060cd8c284d8af7ad3082f209582d”
If-Unmodified-Since只有实体在指定时间之后未被修改才请求成功If-Unmodified-Since:Sat, 29 Oct 2010 19:43:31GMT
Max-Forwards限制信息通过代理和网关传送的时间Max-Forwards:10
Pragma用来包含实现特定的指令Pragma:no-cache
Proxy-Authorization连接到代理的授权证书Proxy-Authorization:Basic QWxhZGRpbjpvcGV uIHNlc2FtZQ==
Range只请求实体的一部分,指定范围Range:bytes=500-999
Referer先前网页的地址,当前请求网页紧随其后,即来路Referer:http://blog.csdn.net/coder_pig
TE客户端愿意接收的传输编码,并通知服务器接收尾 加头信息TE:trailers,deflate;q=0.5
Upgrade向服务器指定某种传输协议以便服务器进行转换 (如果支持)Upgrade:HTTP/2.0,SHTTP/1.3,IRC/6.9, RTA/x11
User-AgentUser-Agent 的内容包含发出请求的用户信息User-Agent:Mozilla/5.0 (Linux;X11)
Via通知中间网关或代理服务器地址,通信协议,标识 一个请求经过的网关路由节点Via:1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning关于消息实体的警告信息Warn:199 Miscellaneous warning

在实际开发过程中,请求头不限于上面这些内容,可以通过抓包的方式查看所用到的 请求头,然后在编写爬虫时添加上。例如,Chrome 浏览器开发者工具下 www.baidu.com 的请求头如下:

在这里插入图片描述

1.3 空行

空行:请求头的最后会有一个空行,表示请求头结束,接下来是请求正文,这个空行必不 可少。

1.4 请求正文

这一般是 POST 请求中提交的表单数据。另外,在请求头 Content-Type 中要使用正确 的类型才能正常提交,如表单数据是 application/x-www-form-urlencoded、文件是 multipart/ form-data、JSON 数据是 application/json、XML 数据是 text/xml,在抓包时可以获取。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

度假的小鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值