小言_互联网的博客

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

249人阅读  评论(0)

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 请求服务器删除指定页面
CONNECT HTTP/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
Authorization HTTP 授权的授权证书 Authorization:BasicQWxhZGRpbjpvcGVuIHNlc2FTZQ==
Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control:no-cache
Connection 表示是否需要持久连接(HTTP 1.1 默认进行 持久连接) Connection:close
Cookie HTTP 请求发送时,会把保存在该请求域名下 的所有 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-mail From: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 如果实体未改变,服务器发送客户端丢失的部 分;否则,发送整个实体,参数也为 Etag If-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-Agent User-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,在抓包时可以获取。


转载:https://blog.csdn.net/u014096024/article/details/128124216
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场