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实现partial改变方法默认参数
Aug 18 Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
python实现微信自动回复功能
Apr 11 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
python协程之动态添加任务的方法
Feb 19 Python
Python后台开发Django的教程详解(启动)
Apr 08 Python
python设计tcp数据包协议类的例子
Jul 23 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 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
合作指挥官:孟斯克
2020/03/16 星际争霸
php array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
Python 登录网站详解及实例
2017/04/11 Python
用matplotlib画等高线图详解
2017/12/14 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
python3实现磁盘空间监控
2018/06/21 Python
python getopt模块使用实例解析
2019/12/18 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
远程研修随笔感言
2014/02/10 职场文书
公司任命书范本
2014/06/04 职场文书
兴趣班停课通知
2015/04/24 职场文书
电视新闻稿
2015/07/17 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers