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中的__init__和__new__
Mar 12 Python
Python中字典(dict)和列表(list)的排序方法实例
Jun 16 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
Python字典及字典基本操作方法详解
Jan 30 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
Python列表(List)知识点总结
Feb 18 Python
python3.x实现base64加密和解密
Mar 28 Python
用python做游戏的细节详解
Jun 25 Python
python实现图片九宫格分割
Mar 07 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
在python中使用nohup命令说明
Apr 16 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实现的json类实例
2015/07/28 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
python3 求约数的实例
2019/12/05 Python
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
Exoticca英国:以最优惠的价格提供豪华异国情调旅行
2018/10/18 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
生物专业个人自荐信范文
2013/11/29 职场文书
给全校老师的建议书
2014/03/13 职场文书
法制宣传实施方案
2014/03/13 职场文书
网站客服岗位职责
2014/04/05 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
单位婚育证明范本
2014/11/21 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
作文批改评语
2014/12/25 职场文书
个人自荐书怎么写
2015/03/26 职场文书
入伍通知书
2015/04/23 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
springboot 多数据源配置不生效遇到的坑及解决
2021/11/17 Java/Android
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript