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实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
Python双向循环链表实现方法分析
Jul 30 Python
python实现简单登陆系统
Oct 18 Python
python脚本当作Linux中的服务启动实现方法
Jun 28 Python
python实现在一个画布上画多个子图
Jan 19 Python
关于python的缩进规则的知识点详解
Jun 22 Python
如何将json数据转换为python数据
Sep 04 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 Python
学会迭代器设计模式,帮你大幅提升python性能
Jan 03 Python
pandas求平均数和中位数的方法实例
Aug 04 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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
php动态绑定变量的用法
2015/06/16 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
Python比较两个图片相似度的方法
2015/03/13 Python
Python 性能优化技巧总结
2016/11/01 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
Django中的Model操作表的实现
2018/07/24 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
美德少年事迹材料
2014/01/23 职场文书
女儿十岁生日答谢词
2014/01/27 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
工程质量保证书
2015/05/09 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android