python3实现微型的web服务器
作者:五力 发布时间:2021-03-03 09:00:49
标签:python3,web服务器
实验目的:用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()
来源:https://blog.csdn.net/lxy210781/article/details/88372456


猜你喜欢
- 解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated原因:MySQL 5.7.5和up实现了对功能依赖的检测。如果启用了only_full_group_by SQL模式(在默认情况下是这样),
- 国外纷纷传言IE8将是Internet Explorer的最后一个版本,这个猜测来源于Microsoft的CEO Steve
- Hello World一个简单的hello world例子:#!/usr/bin/env perluse strict;use warnin
- 一般是有左侧菜单后,然后要在页面上部分添加历史标签菜单需求。借鉴其他项目,以及网上功能加以组合调整实现按照标签实现方式步骤来(大致思路):1
- 1.简介torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现Varia
- 如何使用mailto?1)基本用法<a href=mailto:sample@163.com>send em
- 很久之前就对jQuery.animate的实现非常感兴趣,不过前段时间很忙,直到前几天端午假期才有时间去研究。jQuery.animate的
- 写在前面:新型冠状病毒有多么可怕,我想大家都已经知道了。湖北爆发了新型冠状病毒,湖南前几天爆发了禽流感,四川发生地震,中国加油!昨天晚上我突
- 本文实例讲述了Python使用pickle模块储存对象操作。分享给大家供大家参考,具体如下:众所周知,当我们需要储存数据的时候,就需要用到重
- 有时候我们在设计表单的时候不希望用户输入其它字符,只想他在input中输入数字,那么我们就可以使用下面的代码,当然这个比较是客户
- 在源环境中启动CLion需要告知CLion ROS特定的环境变量。通过运行来源工作空间时,将在当前shell中检索这些变量source ./
- 顺序表python版的实现(部分功能未实现)结果展示:代码示例:#!/usr/bin/env python# -*- coding:utf-
- 一丶父子组件传值先在父组件中给子组件的自定义属性绑定一个 父组件的变量<template class="father&quo
- 前言ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。随着框架代码量的增加,一些潜在的威胁也逐渐暴
- 1、删除Oracal在注册表中的主项:regedit.exe->LocalMachine->Software->Oracl
- 我就废话不多说了,大家还是直接看代码吧~old_record=numpy.load('exist.npy')temp_rec
- 一、jpype模块是什么?能够让 python 代码方便地调用 Java 代码的工具二、jpype模块安装安装和其它模块没区别,但是注意模块
- 1.分包背景这里首先介绍下MultiDex的产生背景。当Android系统安装一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的
- 本文实例讲述了Python实现生成随机日期字符串的方法。分享给大家供大家参考,具体如下:生成随机的日期字符串,用于插入数据库。通过时间元组设
- 根据一般做法的话,导出部分字段时没有办法生成格式化XML文件,所以导入时就没有办法格式化导入数据。 我想到两点,1.手工修改格式化XML文件