一、Web服务器代码

'''
* 功能:Web浏览器访问 Web服务器,获取 index.html 文件
* 目的:1、当一个客户(浏览器)联系时创建一个套接字
*      2、从这个连接接收 HTTP 请求
*      3、解释该请求以确定所请求的特定文件
*      4、从服务器的文件系统获得请求的文件
*      5、创建一个由请求文件组成的 HTTP 响应的报文,报文前面有首部行
*      6、经TCP连接向请求的浏览器发送响应。如果请求文件不在服务器中,返回 “404 Not Found”
'''
from socket import *     #引用套接字
import os                #引用文件管理
serverHost = '127.0.0.1' #Web服务器IP地址
serverPort = 12000       #服务端的端口号'''
* 函数功能:解释 HTTP 请求报文
* 返回值:  请求的文件名
'''
def HTTPExplain(Message):Data = Message.decode() #解码报文print(Data) #打印报文Lines = Data.split("\r\n")  #通过指定分隔符对字符串切片Url = Lines[0].split(" ")   #得到 URL [GET /index.html HTTP/1.1]FileName = Url[1].split('/')[1] #得到 ['index.html']print(FileName) #打印请求文件名return FileName'''
* 函数功能:构造 HTTP 响应报文
* 返回值:  响应报文
'''
def GetFile(FileName):path = "WebServer\\" + FileName  #文件路径if FileName in os.listdir("WebServer"):  #判断文件是否存在with open(path,'r',encoding="utf-8") as fp: #打开文件data = fp.read()  #读取文件HttpResponse = "HTTP/1.1 200 OK\r\n\r\n" + data #请求文件携带请求成功首部else:HttpResponse = "HTTP/1.1 404 \r\n\r\n<h1>404 Not Found</h1>"  #请求失败报文return HttpResponse.encode()#握手套接字
serverSocket = socket(AF_INET,SOCK_STREAM)  #创建一个握手套接字
serverSocket.bind((serverHost,serverPort))  #绑定地址(host,port)到握手套接字
serverSocket.listen(1)  #请求连接的最大数
print('The server is ready,Port is ',serverPort)  #提示服务器准备就绪
#创建连接套接字
connectSocket,addr = serverSocket.accept() #被动接受TCP客户端连接,创建连接套接字
Message = connectSocket.recv(1024)  #接收TCP数据,数据以字符串形式返回
FileName = HTTPExplain(Message) #调用函数获取请求文件
#连接套接字
ResponseMessage = GetFile(FileName)  #调用函数构造响应报文
connectSocket.sendall(ResponseMessage)  #完全发送响应报文
connectSocket.close()  #关闭连接套接字

二、请求文件

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>标题使用</title>
</head>
<body><h1>一级标题</h1><h2>二级标题</h2><h3>三级标题</h3><h4>四级标题</h4><h5>五级标题</h5><h6>六级标题</h6>
</body>
</html>

三、文件路径


我把服务器文件 WebServer.py 和请求文件 index.html 放在了 WebServer 文件夹里,下列两行代码就是确定路径,然后判断文件是否存在。
path = "WebServer\\" + FileName #文件路径
if FileName in os.listdir("WebServer"): #判断文件是否存在
注意:path = "WebServer\\" + FileName #文件路径 这一句为了兼容 windows 系统,在 Linux 系统中不用这一句,可以直接寻找文件

四、Web浏览器访问

如图:输入127.0.0.1:12000/index.html
Host:127.0.0.1
Port:12000
请求文件:index.htnl

Web服务器python编程相关推荐

  1. web服务器python_一个简单的web服务器(python)

    今天用python写一个简单的web服务器代码网上都有只是为了方便大家学习做了一个简单的教程 第一首先我们来一张架构以及运行过程的流程图 本文学习仅供参考,需要更多资料可以加群:496257369 简 ...

  2. 利用python自带的包可以建立简单的web服务器

    2019独角兽企业重金招聘Python工程师标准>>> ##一个命令建立一个简单web服务器 python -m SimpleHTTPServer port 例如:python -m ...

  3. python开发web服务器——搭建简易网站

    转自:http://blog.csdn.net/baidu_35085676/article/details/69807145?%3E 目标 用已有的丰富图片资源建一个看图网站 条件 开发语言: py ...

  4. 应用程序服务器和Web服务器之间有什么区别?

    应用程序服务器和Web服务器之间有什么区别? #1楼 最大的不同是Web服务器处理HTTP请求,而应用程序服务器将在任意数量的协议上执行业务逻辑. #2楼 这取决于特定的体系结构. 某些应用程序服务器 ...

  5. python写web难受-python写web

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 你难道想只凭 python 脚本,就做一个 web 应用出来? 还真别说,最近, ...

  6. TCP与Web服务器

    TCP通信与Web服务器 TCP与Web服务器 Python实现套接字编程 实验准备 服务器端程序 客户机端程序 运行程序步骤 测试运行结果 服务器端优化 缺陷 实验准备 服务器优化前程序运行结果 服 ...

  7. python: 网络编程及fastapi快速搭建web服务器

    一.网络编程 1.网络编程三要素 ip地址.端口.TCP协议 ip地址 ip地址作用: 根据ip地址能够找到网络中的具体设备(电脑,打印机) ip地址概念: ip地址是网络设备的唯一标识 ip地址分类 ...

  8. 利用python编写设计多线程web服务器(计算机网络_自顶向下第六版_第二章1和4的编程作业)

    今天翻看自己以前的博客时,发现了这则博客,距今大约也有一年多的时间了,觉得还是蛮有趣的一个作业,于是跟着博客又做了一遍,觉得之前的排版有点不大好,所以此番用markdown 稍微重做些修改更新一下博客 ...

  9. python web开发 网络编程 HTTP协议、Web服务器、WSGI接口

    文章目录 1. HTTP协议 2. Web服务器 3. 静态服务器 创建 web_server.py 4. WSGI 接口 4.1 CGI 通用网关接口 4.2 WSGI 4.3 定义 WSGI 接口 ...

最新文章

  1. linux获取最高权限并取消_Linux 更新glibc 漏洞 可以获取最高权限
  2. 比杠精网友更可怕的,是懂王同事
  3. java编写学生管理系统_Java实现学生管理系统
  4. 算法练习day12——190331(并查集)
  5. java复习2(编码)
  6. struct stat结构体简介
  7. Date、String、Calendar类型之间的转化
  8. 关于Linux内核的一些问题
  9. 设计模式—工厂模式(思维导图)
  10. 【渝粤教育】国家开放大学2018年春季 0266-21T设计构成 参考试题
  11. 简单工厂模式和策略模式的区别
  12. 关于GIS中Scale和Resolution的那些事儿
  13. 5-(4-硝基苯基)-10,15,20-三苯基卟啉NTPPH2/NTPPZn/NTPPMn/NTPPFe/NTPPNi/NTPPCu/NTPPCd/NTPPCo等金属配合物
  14. oracle归档切换,oracle 切换归档方式
  15. 【贪心】兔警官朱迪买礼物
  16. DICOM:Transfer Syntax传输语义之奇葩GE Private TS
  17. 系统移植-(二)u-boot:启动过程做的工作(汇编阶段、C阶段)
  18. 相机选型与远心镜头选型
  19. 电子元件行业ERP经典客户案例(电陶)
  20. 安卓手机合并内存卡到内置存储

热门文章

  1. Laravel 使用PHP_XLSXWriter实现大数据量Excel导出
  2. undefined reference to 'function'及解决办法
  3. word无法打开请去应用商店_爱不释手的PPT小工具,请收好
  4. 数据库------MYSQL
  5. Unity技术手册 - 粒子基础主模块属性-中
  6. 向量叉乘求三维空间中两直线(或线段)的交点
  7. 深度剖析使用ROS系统开发机器人的好处
  8. 小米盒子 装android,沙发管家教你如何用小米盒子安装非安卓大型游戏
  9. python安装h5py
  10. python-数据分析--案例分析:美国各州人口数据分析