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中的socket模块使用代理实例
May 29 Python
Python实现115网盘自动下载的方法
Sep 30 Python
python文件写入实例分析
Apr 08 Python
python计算对角线有理函数插值的方法
May 07 Python
django基础之数据库操作方法(详解)
May 24 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
python+django+rest框架配置创建方法
Aug 31 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
Python如何读写CSV文件
Aug 13 Python
python实现AdaBoost算法的示例
Oct 03 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 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
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
删除数组元素实用的PHP数组函数
2008/08/18 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
php数组和链表的区别总结
2019/09/20 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
简单的Python的curses库使用教程
2015/04/11 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
详解django自定义中间件处理
2018/11/21 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
浅谈Python 命令行参数argparse写入图片路径操作
2020/07/12 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
联谊活动策划书
2014/01/26 职场文书
一年级学生评语
2014/04/23 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
红歌会主持词
2015/07/02 职场文书