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标准库os.path包、glob包使用实例
Nov 25 Python
python从sqlite读取并显示数据的方法
May 08 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
Sep 11 Python
Python 模块EasyGui详细介绍
Feb 19 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
用Python写一个自动木马程序
Sep 17 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 Python
python爬虫破解字体加密案例详解
Mar 02 Python
python实现MD5进行文件去重的示例代码
Jul 09 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
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
js 匿名调用实现代码
2009/06/19 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
详解Vue3中对VDOM的改进
2020/04/23 Javascript
vue实现选中效果
2020/10/07 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
一行python实现树形结构的方法
2019/08/09 Python
python 发送json数据操作实例分析
2019/10/15 Python
YUV转为jpg图像的实现
2019/12/09 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
银行实习生的自我评价
2013/12/09 职场文书
青春寄语大全
2014/04/09 职场文书
小学新课改心得体会
2016/01/22 职场文书
如何拟写通知正文?
2019/04/02 职场文书
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android