网络编程--http请求、响应网页

网络编程–http请求、响应网页

http协议是一个tcp应用层的超文本传输协议,主要是对网页的传输和数据的传输

http传输过程:

一端通过http请求的格式发送具体请求内容,另一端接收http请求,按照协议 格式进行解析,获取真实请求后按照http协议响应格式 组织回复内容,回法给请求方,完成一次数据交互。

http请求格式:

请求行:具体的请求类别和请求内容
	请求行的格式:   GET       /        HTTP/1.1
	对应的解释:    请求类型   请求内容   http协议版本
	
	请求类型:表示请求的种类
		GET: 获取网络资源
		POST: 提交一定的附加信息,得到返回结果
		...
请求头:对请求内容的具体描述信息
空行:格式要求
请求体:请求参数或提交内容

http响应格式:

响应行:反馈 响应的情况
	响应行的格式:  HTTP/1.1     200       OK
	对应的解释:  http协议版本   响应码     附加信息   
	
	响应吗:响应的具体情况
		1xx:提示信息,表示请求成功
		2xx:响应成功
		3xx:响应需要重定向
		4xx:客户端错误
		5xx:服务端错误
	
	常见的响应码:
		200:成功
		401:没有访问权限
		404:请求内容不存在
		500:服务器发生未知错误
		503:暂时无法执行
		...
响应头:对响应内容的具体描述信息
空行:格式要求
响应体:返回给请求你端的具体内容

使用http协议写一个简单的请求与响应的交互传输数据

如先有一个index.html网页

在这里插入图片描述

一会使用ip和端口号显示这个页面

http代码该怎么写:

  1. 创建套接字
  2. 绑定服务器地址并设置监听
  3. 等待http的请求
  4. 处理http请求,并作出响应
  5. 关闭套接字

请求、响应怎么写:

  1. 接收浏览器的请求
  2. 作出响应,请求是否成功
  3. 返回响应内容
# http_server.py
from socket import *

# 2. 处理浏览器请求的函数
def http_handle(connfd):
    # 接收请求
    request = connfd.recv(4096)
    
    # 作出响应
    try:
        f = open('index.html', 'r')
    except IOError:  # 打开文件失败(请求失败)
        response = 'HTTP/1.1 404 not fount\r\n'
        response += '\r\n'
        response += '---------not fount------------'
    else:  # 打开文件成功(请求成功)
        response = 'HTTP/1.1 200 OK\r\n'
        response += '\r\n'
        response += f.read()
    finally:  # 无论成功还是失败都要执行的语句
        # 将响应信息发送给浏览器
        connfd.send(response.encode())
        f.close()  # 关闭文件

# 1. 写一个主函数,在里边完成基本操作
def main():
    # 创建套接字
    sockfd = socket(AF_INET, SOCK_STREAM)
    # 设置套接字ip格式
    sockfd.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
    # 绑定服务器地址,设置监听
    http_server_addr = ('0.0.0.0', 8000)
    sockfd.bind(http_server_addr)
    sockfd.listen(3)
    
    # 处理请求
    while True:
        connfd, addr = sockfd.accept()
        # 调用函数, 让其处理请求,考虑传什么参数
        http_handle(connfd)
        # 关闭套接字
        connfd.close()
    sockfd.close()

在这里就固定了页面,后面会讲不固定的页面

请求成功如下:

在这里插入图片描述

请求失败(先让index.html在该路径下消失一会)如下:

在这里插入图片描述

刚才说的这样做我们只能固定的打开index.html这个文件,而我们要输入别的文件的话就都会是失败的结局,我们可以做一个判断,先看图片:

在这里插入图片描述
我们看到了,GET后边后边跟的要么是斜杠,要么是一个文件的路径,其实斜杠就是跟目录,会自动匹配index.html,那么怎么匹配到这个路径呢?

# 接收了请求以后进行处理一下
request_lines = request.splitlines()
    reshtml = str(request_lines[0]).split(' ')[1]
    if reshtml[-5:] == '.html' or reshtml == '/':
        print(reshtml)

我们打印了reshtml,看看会打印什么

/index.html
/

第一个是输入文件名称,第二个是不输入直接发出请求

我们可以根据这个做判断了,判断就不说了

本节完!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秒不可闫M先生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值