Python高级——HTTP协议
1.概述
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服 务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(HTTP协议是应用层协议)
链路层:包括操作系统中的设备驱动程序、计算机中对应的网络接口卡。
网络层:处理分组在网络中的活动,比如分组的选路。
运输层:主要为两台主机上的应用提供端到端的通信。
应用层:负责处理特定的应用程序细节。
HTTP协议为请求响应模式:
所以HTTP协议分为请求协议和响应协议:
2.格式查看
使用谷歌/火狐浏览器 开发者工具分析通信过程和格式
(1)元素(Elements):用于查看或修改HTML元素的属性、CSS属性、监听事件、断点等。
(2)控制台(Console):控制台一般用于执行一次性代码, 查看JavaScript对象, 查看调试日志信息 或异常信息.
(3)源代码(Sources):该页面用于查看页面的HTML文件源代码、JavaScript源代码、CSS源代码, 此外最重要的是可以调试JavaScript源代码, 可以给JS代码添加断点等。
(4)网络(Network):网络页面主要用于查看 header 等与网络连接相关的信息。
3.请求报文
请求报文分为4部分
(1)请求行(request-line):请求方式 请求路径 协议版本
(2)请求头(request-header):请求头就是所有当前需要用到的协议项的集合,协议项就是浏览器在请求服务器的时候事先告诉服务器的一些信息,或者一些事先的约定。
常见请求头:
参数 | 描述 |
---|---|
host | 当前url中所要请求的服务器的主机名(域名) |
accept-encoding | 是浏览器发给服务器,声明浏览器支持的压缩编码类型 比如gzip |
accept_charset | 表示,浏览器支持的字符集 |
referer | 表示,此次请求来自哪个网址 |
accept-language | 可以接收的语言类型,cn,en,有权重的高低之分 |
cookie | 如果之前当前请求的服务器在浏览器端设置了数据(cookie),那么当前浏览器 再次请求该服务器的时候,就会把对应的数据带过去 |
user-agent | 用户代理,当前发起请求的浏览器的内核信息 |
accept | 表示浏览器可以接收的数据类型,text/html,image/img |
content-length(post) | 只有post提交的时候才会有的请求头,显示的是当前要提交的 数据的长度(字节) |
if-modified-since(get) | 表示,在客户端向服务器请求某个资源文件时,询问此资源文件是否被修改过 |
(3)空行:就是用来分离请求头和请求数据,意思就是请求头到此结束。
(4)请求数据(request-content),也叫作请求内容或者请求主体:只有post方式提交的时候,才有请求数据
4.响应报文
响应报文也分为4部分:
(1)响应行(状态行):协议版本 状态码 状态描述
状态码与状态:
状态码由三位数字组成,第一个数字定义响应体类别,具有5种可能取值:
状态码 | 描述 |
---|---|
1xx | 指示性息——表示请求已接收,继续处理 |
2xx | 成功——表示请求已被成功接收、理解、接收 |
3xx | 重定向——要完成请求必须进行更进一步的操作 |
4xx | 客户端错误——请求有语法错误或请求无法实现 |
5xx | 服务端错误——服务器未能实现合法的请求 |
常见状态码:
(2)响应头:也是协议的集合
常见响应头:
参数 | 描述 |
---|---|
server | 服务器主机信息 |
date | 响应时间 |
last-modified | 文件最后修改时间 |
content-length | 响应主体的长度(字节) |
content-type | 响应内容的数据类型:text/html,image/png等 |
location | 重定向,浏览器遇到这个选项,就立马跳转(不会解析后面的内容) |
refresh | 重定向(刷新),浏览器遇到这个选项就会准备跳转,刷新一般有时间限制,时间 到了才跳转,浏览器会继续向下解析 |
content-encodeing | 文件编码格式 |
cache-control | 缓存控制,no-cached不要缓存 |
(3)空行:用来分割响应头与响应主体,也就是响应头到此结束
(4)响应主体(响应数据):就是服务器反馈给浏览器的数据
5.案例(模拟浏览器)
import socket
# 创建TCP套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接
tcp_client_socket.connect(('www.icoderi.com', 80))
# 请求行
request_line = "GET / HTTP/1.1\r\n"
# 请求头
request_header = "Host: www.icoderi.com\r\n"
request_data = request_line + request_header + "\r\n"
# 发送请求
tcp_client_socket.send(request_data.encode())
# 接收响应报文
response_data = tcp_client_socket.recv(4096)
# 将响应报文解码
response_str_data = response_data.decode()
# 找到响应空行
x = response_str_data.find('\r\n\r\n')
# 对响应报文进行切割
print(response_str_data[x+4:])
# 将响应体写入index.html文件里
with open('index.html', 'w', encoding='UTF-8') as file:file.write(response_str_data[x+4:])
tcp_client_socket.close()
执行结果:
Python高级——HTTP协议相关推荐
- 已知x=python是一种非常好的编程语言-为什么用Python,高级的Python是一种高级编程语言...
Python特性 如果有人问我Python最大的特点是什么,我会毫不犹豫地告诉他:它简单易学,功能强大.作为一个纯自由软件,Python有许多优点: 很简单.基于"优雅".&quo ...
- Python面试题大全(二):python高级语法
目录 Python高级 元类 42.Python中类方法.类实例方法.静态方法有何区别? 43.遍历一个object的所有属性,并print每一个属性名? 44.写一个类,并让它尽可能多的支持操作符? ...
- python高级编程-网络编程、多任务
python高级编程 1 IP地址 用来在网络中标记一台电脑:在本地局域网上是唯一的. 2 端口 一个程序需要收发网络数据,就需要端口号. 3 socket 创建socket # 创建tcp sock ...
- Python高级知识点汇总第一部
Linux常见命令 ls:查看当前路径下的所有文件及文件名; clear:清空操作; cd 跳转操作,可以跳转到任意路径位置; cd-:跳转到上次所在的路径; cd~:快速切换到当前用户的主目录(快速 ...
- 阿里云大学考试python中级题目及解析-python高级
阿里云大学考试python高级题目及解析 1.以上代码输出结果为 a =[1,2,3,None,(),[],] print(len(a)) A.4 B.5 C.6 D.syntax error C 列 ...
- python高级面试题_10个高级python面试问题
python高级面试题 With Python becoming more and more popular lately, many of you are probably undergoing t ...
- python高级编程之网络编程
Python高级之网络编程 端口 端口分类 知名端口 动态端口 查看端口 socket简介 电脑上进程之间的通信 什么是socket 创建socket 使用UDP套接字发送数据 使用UDP套接字接受数 ...
- python高级编程函数_Python高级编程之十大装B语法
for - else 什么?不是 if 和 else 才是原配吗?No,你可能不知道,else 是个脚踩两只船的家伙,for 和 else 也是一对,而且是合法的.十大装B语法,for-else 绝对 ...
- Python高级特性:切片、迭代、列表生成式、生成器与迭代器
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程 ...
最新文章
- javascript中 (function(){})();如何理解?
- 隐马尔可夫模型维特比算法与前向算法区别
- golang mysql大量写入_Golang 实现分片读取http超大文件流和并发控制
- AXI_03 AXI_LITE_SLAVE_IP核设计与验证
- ASP.NET Core Razor页面 vs MVC
- [ECMAScript] 说说你对async/await的理解?
- 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之注册与登录监听
- 微信开发,自定义菜单不生效怎么办?重新关注也无效
- MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页
- 论文笔记_S2D.67_CamVox: 一种低成本、高精度的激光雷达辅助视觉SLAM系统
- Just Speak 论文精读
- B1105 Spiral Matrix (画图)
- RabbitMq 406错误
- 大数据常见专有名词解释
- 何为业务安全,业务安全部门的具体职责是什么?
- 秒改文件md5,各PC系统可用
- mt2503 [ShapeEngine]泰语音标字符发生偏移
- 怎样制作GIF拼图?教你一键在线拼图
- 从本地管理员到域管理员提权
- 4、弱电工程FTTH网络的分光建设及分光比设计