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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python语言的12个基础知识点小结
Jul 10 Python
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
python实现计算器功能
Oct 31 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
Python requests接口测试实现代码
Sep 08 Python
python文件路径操作方法总结
Dec 21 Python
python实现三次密码验证的示例
Apr 29 Python
Python os和os.path模块详情
Apr 02 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 calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
详解python字节码
2018/02/07 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
python全栈开发语法总结
2020/11/22 Python
python 操作excel表格的方法
2020/12/05 Python
招商业务员岗位职责
2013/12/16 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
产品质量承诺范本
2014/03/31 职场文书
初三学生个人自我评定
2014/04/06 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
民事答辩状格式范文
2015/05/21 职场文书
python基础之类属性和实例属性
2021/10/24 Python
windows11怎么查看wifi密码? win11查看wifi密码的技巧
2021/11/21 数码科技
简单聊聊Golang中defer预计算参数
2022/03/25 Golang
Go语言入门exec的基本使用
2022/05/20 Golang