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 相关文章推荐
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
python实现dict版图遍历示例
Feb 19 Python
Python实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
Python解析最简单的验证码
Jan 07 Python
详解Python装饰器由浅入深
Dec 09 Python
Python3.5实现的罗马数字转换成整数功能示例
Feb 25 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
Python代码太长换行的实现
Jul 05 Python
Python实现自定义读写分离代码实例
Nov 16 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 Python
Python进行区间取值案例讲解
Aug 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
星际流派综述
2020/03/04 星际争霸
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
2016/05/04 PHP
js原生态函数中使用jQuery中的 $(this)无效的解决方法
2011/05/25 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
express 项目分层实践详解
2018/12/10 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
Python文件夹与文件的操作实现代码
2014/07/13 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
html5与css3小应用
2013/04/03 HTML / CSS
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
运动会通讯稿150字
2014/02/15 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
交通事故协议书
2014/04/15 职场文书
2014年底工作总结
2014/12/15 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
python文件与路径操作神器 pathlib
2022/04/01 Python
mysql 获取相邻数据项
2022/05/11 MySQL