通过前一篇博客我们可以了解,当在浏览器端输入127.0.0.1:7890时会发送request请求,格式为GET / HTTP/1.1,如果指定访问页面输入127.0.0.1:7890/index.html时request请求,格式为GET /index.html HTTP/1.1。
因此我们可以通过正则表达式提取出index.html,然后将本地的index.html读取发送给浏器,得到相应的页面。

import re
import socketdef service_client(new_socket):"""为这个客户端返回数据"""#  1.接收浏览器发送过来的请求,即HTTP请求request=new_socket.recv(1024)request=request.decode("utf-8")  #  解码request_lines=request.splitlines()  #  按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表print(request_lines)#  GET /index.html HTTP/1.1#  [^/]表示除了/都可以file_name=""ret=re.match(r"[^/]+(/[^ ]*)",request_lines[0])if ret:file_name=ret.group(1)if file_name=="/":file_name="/index.html"#  2.返回HTTP格式的数据,给浏览器try:#  准备发送的body,打开HTML文件f=open("html"+file_name,'rb')except:response="HTTP/1.1 404 NOT FOUND\r\n"response+='\r\n'response+="----file not found----"new_socket.send(response.encode("utf-8"))else:html_content=f.read()f.close()#  准备发送的headerresponse="HTTP/1.1 200 OK\r\n"response+="\r\n"  #  header与body之间必须隔一行#  发送headernew_socket.send(response.encode("utf-8"))#  发送HTMLnew_socket.send(html_content)new_socket.close()def main():tcp_sever_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#  服务器先关闭,保证重新开启不占用端口tcp_sever_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)tcp_sever_socket.bind(("",7890))tcp_sever_socket.listen(128)while True:#  等待新客户端的链接new_socket,client_addr=tcp_sever_socket.accept()service_client(new_socket)#  关闭监听套接字tcp_sever_socket.close()
if __name__ == '__main__':main()

Python实现HTTP服务器(二)返回指定的html页面相关推荐

  1. flutter 返回指定界面_Flutter页面路由导航及传参

    转载请注明出处: https://learnandfish.com/ 概述 每个应用都有很多个页面,在flutter中同样也有很多页面,被称之为路由(Router),页面之间的跳转通过导航器(Navi ...

  2. 乐鑫Esp32学习之旅13 esp32 内置 dns 服务器,无需外网访问域名返回指定网页。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  3. python输入日期计算天数_用python计算日期(1、返回指定日期所在的一周,2,计算一个日期的月份和天数加减)...

    放两个小轮子吧,欢迎测试bug,然后告诉我: 1.返回指定日期所在的一周 2,计算一个日期的月份和天数加减 # -*- coding: utf-8 -*- """ Cre ...

  4. Python操作FTP服务器实现文件和文件夹的上传与下载,python清理ftp目录下的所有文件和非空文件夹

    Python 连接 FTP 服务器并实现文件夹上传实例演示 第一章:连接 FTP 服务器并实现文件夹上传 ① 连接 FTP 服务器 ② 区分文件和文件夹名 ③ 文件夹名包含空格处理 ④ 使用递归实现: ...

  5. python搭建HTTP服务器

    文章目录 前言 一.HTTP服务器搭建 二.功能强化 前言 项目经常需要HTTP对接,模拟HTTP client请求可以使用postman测试,模拟HTTP server回复该如何处理?本文介绍通过p ...

  6. python --搭建FTP服务器

    一.了解FTP服务器 二.利用python搭建FTP服务器 1.安装 pyftpdlib 模块 2.找到pyftpdlib模块源文件所在目录 3.到 pyftpdlib目录下 4. 编写并运行FTP代 ...

  7. 图片上传指定服务器上,上传图片,通过node服务器存储在指定目录

    最近做毕设,需要上传图片,因为在本地服务器运行,所以想着前端上传后,通过node服务器接收图片,存储在指定的目录下. 一.前端实现 1.前端的页面和上传图片是利用element-ui组件实现的,&qu ...

  8. python怎么调用函数的返回值类型,10、Python基础之函数的调用与返回值

    一.函数参数 1.1 不定长参数 当我们定义函数时,可能需要定义一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数. 我们可以在形参前面加上一个 * ,这样这个形参就可以获取所有的实参,它将 ...

  9. Python 连接FTP服务器并实现文件夹下载实例演示,python区分ftp目录下文件和文件夹方法,ftp目录下包含中文名问题处理

    Python 连接 FTP 服务器并实现文件夹下载实例演示 第一章:连接 FTP 服务器并实现文件夹下载 ① 连接 FTP 服务器 ② 进入指定目录并显示文件信息 ③ 区分文件和文件夹名 ④ 文件夹名 ...

最新文章

  1. JS删除数组指定下标并添加到数组开头
  2. anaconda怎么下载python3.6_Anaconda Python3.6下载
  3. linux简单设计与实现代码,《linux内核设计与实现》第五章(示例代码)
  4. 5、【华为HCIE-Storage】--RAID类型
  5. 【推荐】如何删除windows服务
  6. dns设置服务器版本信息,DNS设置方法
  7. 服务器硬盘如何验收,系列服务器及存储测试安装验收报告.doc
  8. linux内核2.6.35编译过程
  9. HTML作业-花店网页商城
  10. 从零实现SpringBoot简易读写分离,也不难嘛!
  11. 1 Hello World,JavaFX Style
  12. SQL2005的SSMS连接SQL2012会有问题
  13. Kafka实战之整合Flume和Kafka完成实时数据采集
  14. Shiro教程及案例
  15. 种草功能在电商app源码中发挥的作用和价值
  16. 博士申请 | 新加坡科技设计大学段凌杰教授招收人工智能全奖博士生
  17. 传智播客对大学的期许
  18. 关于netty的@Sharable注解含义,你可bie瞎说了
  19. 医疗讲座直播运营方案怎么做
  20. Python爬取安居客经纪人信息

热门文章

  1. 今天的一条条平坦的即时通讯
  2. 浅谈SQL中存储过程和自定义函数的区
  3. WinSocket模型的探讨——完成端口模型
  4. 历史重现,德国海关突袭IFA大展
  5. 10.9 自动注册DSN和创建表
  6. 游走于天才与疯子边缘的创业“鬼才”
  7. android xml黑体字_如何在 Android 上使用思源黑体作为系统字体?
  8. 机器学习 | 模型选择
  9. U盘文件系统无法识别,数据怎么恢复?
  10. 苹果Mac修改图标“偷梁换柱”的一种简单方法