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 相关文章推荐
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
python中实现php的var_dump函数功能
Jan 21 Python
Python中的ConfigParser模块使用详解
May 04 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
点球小游戏python脚本
May 22 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
用Python解数独的方法示例
Oct 24 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
利用Python pandas对Excel进行合并的方法示例
Nov 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
PHP Mysql编程之高级技巧
2008/08/27 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
更改localhost为其他名字的方法
2014/02/10 PHP
php生成图片缩略图的方法
2015/04/07 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
javascript 函数使用说明
2010/04/07 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
python3图片文件批量重命名处理
2019/10/31 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
Python中os模块功能与用法详解
2020/02/26 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
同学会邀请书大全
2014/01/12 职场文书
公司委托书范本
2014/04/04 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
人事任命书格式
2014/06/05 职场文书
礼貌问候语大全
2015/11/10 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
教你用python控制安卓手机
2021/05/13 Python
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL