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字典排序实例详解
May 20 Python
Python实现的矩阵类实例
Aug 22 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
Feb 21 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
python实战教程之自动扫雷
Jul 13 Python
Flask框架web开发之零基础入门
Dec 10 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
pandas的qcut()方法详解
Jul 06 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
python实现马丁策略的实例详解
Jan 15 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代码的53条建议
2008/03/27 PHP
PHP中的extract的作用分析
2008/04/09 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
PHP中使用gettext来支持多语言的方法
2011/05/02 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
2012/10/24 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
JS实现的样式切换功能tableCSS实例
2016/12/30 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python使用xslt提取网页数据的方法
2018/02/23 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
详解django中Template语言
2020/02/22 Python
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
黄河象教学反思
2014/02/10 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
《詹天佑》教学反思
2016/02/20 职场文书