使用python实现http服务器
主要使用python实现了一个http服务器。http服务器实现了用户的注册和登录的简单功能,当然还可以继续扩展。
数据的存储使用的是文件,有兴趣的话可以使用数据库进行存储。当然根据个人兴趣而定。
本记录主要是为了自己后面进行查阅,并给有需要的人提供方便,抛砖引玉。如果浪费了大家的时间也请多多关照。
- 进程启动代码
from ChttpServer import CHttpServer
def main():
http_server = CHttpServer.CHttpServer()
http_server.bind(8000)
http_server.start() if __name__ == "__main__":
main()
2.http服务器实现类
import socket
import sys
import re
from multiprocessing import Process
class CHttpServer(object):
"""Httpserver服务端类"""
def __init__(self):
self.m_serverSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.m_serverSocket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
def start(self):
self.m_serverSocket.listen(128)
while(True):
m_clientSocket,m_clientAddr = self.m_serverSocket.accept()
print('[%s,%s]用户连接上了服务器' % m_clientAddr)
handle_client_process = Process(target = self.handle_client,args=(m_clientSocket,))
handle_client_process.start()
m_clientSocket.close()
#数据处理进程
def handle_client(self,clientSocket):
'''
处理客户请求操作
'''
#获取客户请求数据
request_data = clientSocket.recv(1024)
#print('接收到的数据:%s' % request_data)
request_lines=request_data.splitlines()
#print(len(request_lines))
strlist=[]
for line in request_lines:
strlist=str(line).split('&')
if len(strlist) > 1:
break
#print(strlist[1:5])
userinfolist = strlist[1:3]
user_info='&'.join(userinfolist)
#print(userinfolist)
#用户名&密码&操作类型&来源
#解析请求报文
'''
报文协议格式:clientparam=&username&pwd&method&type&.
type:0 注册 1登录
'''
file_data=''
response_body=''
response=''
response_start_line = "HTTP/1.1 200 OK\r\n"
response_headers = "Server: My server\r\n"
if strlist[3]=='':#注册
"""写注册文件"""
fp = open('userinfo.txt','a+') fp.write(user_info)
fp.write('\n')
fp.close()
file_data=r'<b>恭喜您,注册成功:'+ (strlist[1]+'</b>')
response_body = file_data
response = response_start_line + response_headers + "\r\n" + response_body
elif strlist[3]=='': #登录
"""登录系统"""
fp = open('userinfo.txt','r')
for line in fp.readlines():
if line.replace('\n','') == user_info.replace('\n',''):
#print(user_info)
file_data=r'<b>恭喜您,登录成功:'+ (strlist[1]+'</b>')
response_body = file_data
response = response_start_line + response_headers + "\r\n" + response_body
break
# 向客户端返回 响应数据
fp.close()
elif strlist[3]=='': #重置密码
pass
else:
file_data=r'非法操作'
response_body = file_data
response = response_start_line + response_headers + "\r\n" + response_body
print('发送的数据[%s]' % response)
clientSocket.send(bytes(response, "gbk"))
#组装返回包
def start_response(self,status,headers):
response_headers = "HTTP/1.1 " + status + "\r\n"
for header in headers:
response_headers += "%s: %s\r\n" % header
self.response_headers = response_headers
#绑定端口
def bind(self,port):
self.m_serverSocket.bind(('',port))
def parseline(self,strcon):
"""解析字符串"""
pass
3、运行情况
测试命令:http://127.0.0.1:8000/&jifei&123456&2&0&

使用python实现http服务器的更多相关文章
- Python 创建本地服务器环境生成二维码
一. 需求 公司要做一个H5手机端适配页面,因技术问题所以H5是外包的,每次前端给我们源码,我们把源码传到服务器让其他人访问看是否存在bug,这个不是很麻烦吗?有人说,可以让前端在他们的服务器上先托管 ...
- python实现websocket服务器,可以在web实时显示远程服务器日志
一.开始的话 使用python简单的实现websocket服务器,可以在浏览器上实时显示远程服务器的日志信息. 之前做了一个web版的发布系统,但没实现在线看日志,每次发布版本后,都需要登录到服务器上 ...
- Python搭建Web服务器,与Ajax交互,接收处理Get和Post请求的简易结构
用python搭建web服务器,与ajax交互,接收处理Get和Post请求:简单实用,没有用框架,适用于简单需求,更多功能可进行扩展. python有自带模块BaseHTTPServer.CGIHT ...
- python使用qq服务器发送邮件
python使用qq服务器发送邮件 直接上代码: #!/usr/bin/python2.7 #-*- coding: UTF-8 -*- # sendmail.py # # init created: ...
- [源码]Python简易http服务器(内网渗透大文件传输含下载命令)
Python简易http服务器源码 import SimpleHTTPServerimport SocketServerimport sysPORT = 80if len(sys.argv) != 2 ...
- Python 绝技 —— UDP 服务器与客户端
i春秋作家:wasrehpic 0x00 前言 在上一篇文章「Python 绝技 —— TCP 服务器与客户端」中,介绍了传输层的核心协议 TCP ,并运用 Python 脚本的 socket 模块演 ...
- python搭建简易服务器实例参考
有关python搭建简易服务器的方法. 需求分析: 省油宝用户数 已经破了6000,原有的静态报表 已经变得臃肿不堪, 每次打开都要缓上半天,甚至浏览器直接挂掉 采用python搭建一个最最简易的 w ...
- python搭建本地服务器
python搭建本地服务器 python3以上版本 'python3 -m http.server 8000' 默认是8000端口,可以指定端口,打开浏览器输入http://127.0.0.1:800 ...
- Python web 简单服务器的搭建与运行
搭建python的CGI环境: 假设在/var/www/cgi-bin下建立一个hello.py的文件 在ubuntu下打开终端 然后用命令 cd /var/www/ 进入后执行命令 : python ...
- [容器]python搭建简易服务器+docker导入多个镜像shell脚本
从其他机器导出来的docker镜像,集中地放在某台上,其他的机器执行 curl xxx:8000/load_images.sh 来导入镜像,简单方便 使用python简易web服务器. (在镜像目录下 ...
随机推荐
- P5304旅行者(比bk201还要流氓的解法)
题目如上. 暴力碾标算,n^2过百万!! 作为一道黑题它确实有点点水(如果是畜生解法的话) 就是找出两两点之间的最短路的最小值. 本来是很高深的一题,要跑两遍最短路啊,然后染色啊,再拓展什么的,但是! ...
- acm经验(转)
先简单介绍一下自己: 高中在OI打过一段时间酱油,大一后暑假进入ACM集训队,到大三寒假,总共一年半的ACM生涯. 总共参加了四场比赛:区域赛一银(2013长春)一铜(2013杭州)一铁(2012金华 ...
- dhcpv6+radvd服务器搭建
1.isc-dhcp-server install sudo apt update sudo apt-get install isc-dhcp-server 2.设置dhcp 创建/etc/dhcp/ ...
- poj 3461 Oulipo(KMP)
Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 49378 Accepted: 19617 Descript ...
- hdu 4337 King Arthur's Knights (Hamilton)
King Arthur's KnightsTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 正则表达式 第五篇:C# 正则元字符
本文整理C#正则表达式的元字符,正则表达式是由字符构成的表达式,每个字符代表一个规则,表达式中的字符分为两种类型:普通字符和元字符.普通字符是指字面含义不变的字符,按照完全匹配的方式匹配文本,而元字符 ...
- 力扣(LeetCode)平方数之和 个人题解
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c. 示例1: 输入: 5 输出: True 解释: 1 * 1 + 2 * 2 = 5 示例2: 输入: 3 ...
- 朱辉(茶水): Linux Kernel iowait 时间的代码原理
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 朱辉(茶水) 来源: 微信公众号linux阅码场(id: linuxdev) 作者介绍 朱辉,个人主页 htt ...
- uniapp打包Android APP
1.uniAPP 将项目打包成,打包成功后格式如下 2.下载相关工具 Android studio(打包成app的工具) 和Hbuilder官方SDK,安装解压响应工具 3. 用 Android st ...
- [ch03-01] 均方差损失函数
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 3.1 均方差函数 MSE - Mean Square ...