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之关于循环的小伎俩
Oct 02 Python
解决python3 urllib中urlopen报错的问题
Mar 25 Python
python生成词云的实现方法(推荐)
Jun 13 Python
通过Python实现自动填写调查问卷
Sep 06 Python
微信跳一跳python辅助软件思路及图像识别源码解析
Jan 04 Python
python3之模块psutil系统性能信息使用
May 30 Python
Django安装配置mysql的方法步骤
Oct 15 Python
Python:slice与indices的用法
Nov 25 Python
python 实现保存最新的三份文件,其余的都删掉
Dec 22 Python
浅析Python 多行匹配模式
Jul 24 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 Python
Python标准库之typing的用法(类型标注)
Jun 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的分页功能
2007/03/21 PHP
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
原生js实现验证码功能
2017/03/16 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
详解在Python和IPython中使用Docker
2015/04/28 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
Java基础面试题
2014/07/19 面试题
制作部班长职位说明书
2014/02/26 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
2015年工商所工作总结
2015/05/21 职场文书
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android