python实现静态服务器


Posted in Python onSeptember 05, 2019

本文实例为大家分享了python静态服务器的具体代码,供大家参考,具体内容如下

#coding:utf-8
import socket
import multiprocessing
import re


HTML_ROOT_DIR = "./html"

class HTTPServer(object):

  #初始化
  def __init__(self):
    self.serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)


  #开启服务器启动进程
  def start(self):
    self.serversocket.listen(128)
    while True:
      clintsocket, addree = self.serversocket.accept()
      hanlderprogess = multiprocessing.Process(target=self.xiexi, args=(clintsocket,))
      hanlderprogess.start()
      clintsocket.close()

  #绑定端口
  def bind(self,port):
    self.serversocket.bind(("", port))


  #获取请求头,进行解析,同时发送相应头
  def xiexi(clserver):
    date = clserver.recv(1024)
    print date
    list = str(date).split("\r\n")
    # 解析
    requesthead = list[0]
    print requesthead
    #使用正则表达式解析出请求头的文件名称
    file = re.match(r"\w+ +(/[^ ]*) ",requesthead).group(1)

    #对获取的问题名判断,如果是/的就进行显示index.html
    if "/"==file:
      file = "/index.html"
    try:
      f = open(HTML_ROOT_DIR+file,"rb")
    except:
      response_start_line = "HTTP/1.1 200 OK \r\n"
      response_headers = "Server:My server\r\n"
      response_body = "the file not file"
    else:
      file_date = f.readline()
      f.close()
      response_start_line = "HTTP/1.1 200 OK \r\n"
      response_headers = "Server:My server\r\n"
      response_body = file_date.decode("utf-8")

    response = response_start_line+response_headers+"\r\n"+response_body
    print response
    clserver.send(bytes(response))
    clserver.close()

def main():
  server = HTTPServer()
  server.bind(1001)
  server.start()

if __name__=="__main__":
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python正则表达式教程之二:捕获篇
Mar 02 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 Python
Python如何使用内置库matplotlib绘制折线图
Feb 24 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 Python
python编写简单端口扫描器
Sep 04 #Python
python 3.6.7实现端口扫描器
Sep 04 #Python
python用线性回归预测股票价格的实现代码
Sep 04 #Python
python多线程扫描端口(线程池)
Sep 04 #Python
Python数据分析模块pandas用法详解
Sep 04 #Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
Sep 04 #Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 #Python
You might like
如何在PHP中使用Oracle数据库(1)
2006/10/09 PHP
PHP+APACHE实现网址伪静态
2015/02/22 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
go和python变量赋值遇到的一个问题
2017/08/31 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
Python实现word2Vec model过程解析
2019/12/16 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
环保倡议书怎么写
2014/05/16 职场文书
欢迎标语大全
2014/06/21 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
后天观后感
2015/06/08 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android