python3实现微型的web服务器


Posted in Python onSeptember 03, 2019

实验目的:用socket 模拟一个微型的web服务器,当py脚本run起后,实微型web server架起了,然后用本地浏览器访问127.0.0.1:8080(web server的ip_port)时web服务器就会将网页内容传给浏览器,实现网页浏览. 

sw+sys: python3.7.2 + windows10 64bit

本地准备的server端网页为下载的hao123主页(我已上载并上传,点击这里)

通过这个实验让我学到了:

1. 当get请求一个主页时,要完整的显示一个页面(包括文本、图片、css绚染等)是要get多次请求的。

2. respone回复本地页网,open(filepath, rwa)时要特别的注意

import socket
import os
 
curfilepath = os.path.split(os.path.realpath(__file__))[0].replace("\\" , "/")
print(f'curfilepath: {curfilepath}')
 
 
def new_socket_server(new_socket, new_addr):
 if new_addr[0] != '':
 print(f'当前客户端{new_addr}已连接上server端. ')
 
 # 3.接收信息
 file_name = ''
 request_data = new_socket.recv(1024).decode('utf-8')
 if request_data != '':
 print(f'有收到新的信息,信息如下:\n{request_data}')
 file_name = request_data.splitlines()[0].split(' ')[1]
 print(f'file_name: {file_name}')
 if file_name == '/':
  file_name = '/index.html'
  print(f'file_name: {file_name}')
 with open(curfilepath + '/test.txt', 'a+') as f:
  f.write(file_name + '\n')
 
 # 4.回复信息
 try:
 f = open(curfilepath + '/htmltest' + 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()
 response = 'HTTP/1.1 200 OK\r\n' + '\r\n'
 new_socket.send(response.encode('utf-8'))
 new_socket.send(html_content)
 
 
def main():
 # 1.创建socket
 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
 # 2.连接server
 server_ip_port = ('127.0.0.1', 8080)
 tcp_server_socket.bind(server_ip_port)
 tcp_server_socket.listen(128)
 while True:
 print('正在等待client端连接... ...')
 new_socket, new_addr = tcp_server_socket.accept()
 new_socket_server(new_socket, new_addr)
 new_socket.close()
 
 
if __name__ == '__main__':
 main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
python list 合并连接字符串的方法
Mar 09 Python
python解析xml文件实例分享
Dec 04 Python
Python 时间操作例子和时间格式化参数小结
Apr 24 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
python列表生成式与列表生成器的使用
Feb 23 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
Dec 05 Python
python 实现多线程下载视频的代码
Nov 15 Python
python中count函数简单的实例讲解
Feb 06 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
Jun 30 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 Python
Python面向对象之Web静态服务器
Sep 03 #Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 #Python
Django中间件拦截未登录url实例详解
Sep 03 #Python
如何为Python终端提供持久性历史记录
Sep 03 #Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 #Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 #Python
python实现静态web服务器
Sep 03 #Python
You might like
php db类库进行数据库操作
2009/03/19 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
CCPry JS类库 代码
2009/10/30 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
Python三元运算实现方法
2015/01/12 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
python监控文件并且发送告警邮件
2018/06/21 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
python——全排列数的生成方式
2020/02/26 Python
如何理解python面向对象编程
2020/06/01 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
为什么使用接口?
2014/08/13 面试题
英语翻译系毕业生求职信
2013/09/29 职场文书
给男朋友的道歉信
2014/01/12 职场文书
秘书英文求职信范文
2014/01/31 职场文书
授权委托书格式模板
2014/04/03 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
改进作风怎么办发言材料
2014/08/17 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers