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()

执行结果:
这里写图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,sort_index()函数是pandas库中DataFrame数据对象的一个方法,用于根据行标签和列名称对数据进行排序。函数的语法如下:sort_index(axis=0, level=None, ascending=True, inplace=False, kind="quicksort", na_position="last", sort_remaining=True, ignore_index=False)。\[1\] 另外,pandas的DataFrame数据对象还有另一种排序方式,即根据指定某一列的值进行排序,这可以通过sort_values()函数实现。\[2\] 需要注意的是,sort_index()函数是根据行标签和列名称进行排序,而sort_values()函数是根据某一列的值进行排序。 除了pandas库中的排序函数,还可以使用其他排序算法,比如冒泡排序和选择排序。冒泡排序是一种简单的排序算法,它通过比较相邻元素的大小并交换位置来实现排序。\[3\]选择排序是另一种常见的排序算法,它通过每次选择最小的元素并将其放置在已排序部分的末尾来实现排序。 希望以上信息对您有所帮助! #### 引用[.reference_title] - *1* *2* [python函数sort_index 和 sort_values排序](https://blog.csdn.net/lss1990lss/article/details/119559207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [蓝桥杯python组————笔记整理](https://blog.csdn.net/qq_46639904/article/details/124023255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值