#coding:utf-8

importsocketimportreimportsysfrom multiprocessing importProcessclassHTTPServer(object):def __init__(self, application):"""application:指的是框架的app"""self.server_socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)

self.app=applicationdefstart(self):

self.server_socket.listen(128)whileTrue:

client_socket, client_address=self.server_socket.accept()print("[%s, %s]用户连接上了" %client_address)

handle_client_process= Process(target=self.handle_client, args=(client_socket,))

handle_client_process.start()

client_socket.close()defstart_response(self, status, headers):

response_headers= "HTTP/1.1" + status + "\r\n"

for header inheaders:

response_headers+= "%s: %s\r\n" %header

self.response_headers=response_headersdefhandle_client(self, client_socket):"""处理客户端请求"""

#获取客户端请求数据

request_data = client_socket.recv(1024)print("request data:", request_data)

request_lines=request_data.splitlines()for line inrequest_lines:print(line)#解析请求报文

request_start_line =request_lines[0]#提取用户请求的文件名及请求方法

file_name = re.match(r"\w+ +(/[^ ]*)", request_start_line.decode("utf-8")).group(1)

method= re.match(r"(\w+) +/[^ ]*", request_start_line.decode("utf-8")).group(1)

env={"PATH_INFO": file_name,"METHOD": method

}

response_body=self.app(env, self.start_response)

response= self.response_headers + "\r\n" +response_body#向客户端返回响应数据

client_socket.send(bytes(response, "utf-8"))#关闭客户端连接

client_socket.close()defbind(self, port):

self.server_socket.bind(("", port))defmain():if len(sys.argv) < 2:

sys.exit("python MyWebServer.py Module:app")

module_name, app_name= sys.argv[1].split(":")#module_name = "MyWebFrameWork"

#app_name = "app"

m = __import__(module_name)

app=getattr(m, app_name)

http_server=HTTPServer(app)

http_server.bind(8000)

http_server.start()if __name__ == "__main__":

main()

python实现简单的http服务器_Python实现简单HTTP服务器(二)相关推荐

  1. python调用scp上传目录_Python调用scp向服务器上传文件示例

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. python搭建web服务器_Python搭建简单的web服务器

    Python搭建简单的web服务器 1.win+R输入cmd打开命令行 2.通过 cd 进入到你保存 HTML 文件的目录.例如:H:\D3\d3 输入 cd\ 指令进入到C盘的根目录.(CD(更改目 ...

  3. python 做网站用服务器_Python实现简单的Web服务器 Part2—支持动态网站

    1. 什么是CGI? CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程 ...

  4. python实现简单的http服务器_python实现简单http服务器功能

    背景 写一个python脚本,实现简单的http服务器功能: 1.浏览器中输入网站地址:172.20.52.163:20014 2.server接到浏览器的请求后,读取本地的index.html文件的 ...

  5. python做一个登录注册界面_Python 实现简单的登录注册界面

    Python 实现简单的登录注册界面 注意:编写代码之前需要导入很重要的包 import tkinter as tk import pickle from tkinter import message ...

  6. python文字识别并获取位置_python实现简单的文字识别

    将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).今天我们用到的就是一个OCR 库--Tesseract. 首先要安装Tesseract,除 ...

  7. python中excel制作成绩报表_python制作简单excel统计报表2之操作excel的模块openpyxl简单用法...

    python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...

  8. python登录系统的实现方法_python实现简单登陆系统

    新手,虽然比较简单的东西,但是弄了我很久. 很多不完善的地方,比如锁定用户,同一用户输入错三次密码就会锁定,但是如果在第二第三次换了用户再输入原来的用户,则计数会重新计算. 另外不存在的用户输入密码错 ...

  9. python怎么实现音乐快进_Python 超简单3行代码提取音乐高潮(附批量提取)

    有些时候,为了设定手机铃声或者发抖音视频,我们会耗费大量时间在剪辑音乐高潮部分上.那么这个音乐高潮的提取能不能自动化呢?当然可以. 先来听听效果,孤芳自赏提取高潮后的部分: 怎么样,是不是迫不及待想往 ...

最新文章

  1. Lua 数据类型介绍
  2. 【重磅收藏】智源发布《人工智能的认知神经基础白皮书》
  3. 第十一章:WEB浏览器中的javascript
  4. 供配电负荷计算方法详解
  5. 成功解决ModuleNotFoundError: No module named 'torch.utils.tensorboard'
  6. 【转载】CMenu自绘---钩子---去除边框
  7. LiveVideoStackCon 2018 注册通道即将关闭
  8. MATLAB新手教程
  9. 開發MOSS2007 Masterpage的一些經驗
  10. python 3.5安装pywin32
  11. c++ linux 线程等待与唤醒_Linux驱动程序基石-POLL机制(附.视频)
  12. 【常识】2016-10-26
  13. python解读器_Python装饰器完全解读
  14. PhotoShop2018安装与破解教程
  15. uint8_t、uint16_t、uint32_t、uint64_t
  16. order by排序出现问题
  17. python 语义similarity_GitHub - samelltiger/word_similarity: 基于《知网》的语义相似度计算 python2.7 API...
  18. KMP字符串模式匹配算法【精简代码模板】
  19. 解决Word文章表格中无法自动换页的问题,表格结尾处像是被下一页覆盖掉了
  20. 字符串转换成数字的三种方法 js

热门文章

  1. Linux命令行与shell脚本编程大全:第2版
  2. C# Task注意事项
  3. 卷积神经网络学习笔记与心得(4)池化
  4. delphi自定义事件处理
  5. 【Web API系列教程】1.2 — Web API 2中的Action Results
  6. 我的JavaScript学习笔记
  7. 使用Fiddler手机抓包https-----重要
  8. ANDROID_MARS学习笔记_S01_011ProgressBar
  9. 成都Uber优步司机奖励政策(1月9日)
  10. Hide the common top menu in Ubuntu 12.04