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基础教程之类class定义使用方法
Feb 20 Python
python使用PyFetion来发送短信的例子
Apr 22 Python
Python实现从url中提取域名的几种方法
Sep 26 Python
简单实现Python爬取网络图片
Apr 01 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
Jun 14 Python
python实现小球弹跳效果
May 10 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
python多维数组分位数的求取方式
Mar 03 Python
django 装饰器 检测登录状态操作
Jul 02 Python
Python判断变量是否是None写法代码实例
Oct 09 Python
Django celery异步任务实现代码示例
Nov 26 Python
python缺失值填充方法示例代码
Dec 24 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
玛琪朵 Macchiato
2021/03/03 咖啡文化
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
用PHP和MySQL保存和输出图片
2006/10/09 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
详解Puppeteer 入门教程
2018/05/09 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
Python单例模式实例分析
2015/01/14 Python
python制作小说爬虫实录
2017/08/14 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Python socket聊天脚本代码实例
2020/01/02 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
利用Python的folium包绘制城市道路图的实现示例
2020/08/24 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
诚信考试倡议书
2014/04/15 职场文书
员工工作表现评语
2014/04/26 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
计划生育诚信协议书
2014/11/02 职场文书
标枪加油稿
2015/07/22 职场文书
中考百日冲刺决心书
2015/09/22 职场文书