Python实现搭建-简单服务器教程 焦点快看

2023-04-18 16:45:23 来源: 博客园


(相关资料图)

Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下:1.等待客户端的链接,服务器会收到一个http协议的请求数据报2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文件的环境)3.提取出文件的环境之后,利用截断取片的方法将文件名转化为模块名称4.使用m = __import__(),就可以得到返回值为m的模块5.创建一个env字典:其中包含的是请求方式及文件环境等各种的键值对6.创建一个新的动态脚本,其中定义了application这个函数,必须包含env和start_response的参数(也是服务器里的调用方法)7.在这个动态脚本中定义状态码status和响应头headers(注意是字典形式,如Content-Type)8.然后再调用start_response(status,headers),但是要注意,这个函数在服务器被定义9.在动态脚本中编写动态执行程序10.m.appliction的返回值就是回应数据包的body,它的数据头在start_response被整合11.将数据头与数据body拼接起来,然后发送给客户端,就可显示动态网页

MyWebServer

import socketimport reimport sys from multiprocessing import Processfrom MyWebFramework import Application # 设置静态文件根目录HTML_ROOT_DIR = "./html"WSGI_PYTHON_DIR = "./wsgipython" class HTTPServer(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 = application     def start(self):        self.server_socket.listen(128)        while True:            client_socket, client_address = self.server_socket.accept()            #print("[%s,%s]用户连接上了" % (client_address[0],client_address[1]))            print("[%s, %s]用户连接上了" % client_address)            handle_client_process = Process(target=self.handle_client, args=(client_socket,))            handle_client_process.start()            client_socket.close()     def start_response(self, status, headers):        """         status = "200 OK"    headers = [        ("Content-Type", "text/plain")    ]    star        """        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 handle_client(self, client_socket):        """处理客户端请求"""        # 获取客户端请求数据        request_data = client_socket.recv(1024)        print("request data:", request_data)        request_lines = request_data.splitlines()        for line in request_lines:            print(line)         # 解析请求报文        # "GET / HTTP/1.1"        request_start_line = request_lines[0]        # 提取用户请求的文件名        print("*" * 10)        print(request_start_line.decode("utf-8"))        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()     def bind(self, port):        self.server_socket.bind(("", port)) def main():    sys.path.insert(1, WSGI_PYTHON_DIR)    if len(sys.argv) < 2:        sys.exit("python MyWebServer.py Module:app")    # python MyWebServer.py  MyWebFrameWork: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.set_port    http_server.bind(8000)    http_server.start() if __name__ == "__main__":    main()

MyWebFrameWork

import time# from MyWebServer import HTTPServer # 设置静态文件根目录HTML_ROOT_DIR = "./html" class Application(object):    """框架的核心部分,也就是框架的主题程序,框架是通用的"""    def __init__(self, urls):        # 设置路由信息        self.urls = urls     def __call__(self, env, start_response):        path = env.get("PATH_INFO", "/")        # /static/index.html        if path.startswith("/static"):            # 要访问静态文件            file_name = path[7:]            # 打开文件,读取内容            try:                file = open(HTML_ROOT_DIR + file_name, "rb")            except IOError:                # 代表未找到路由信息,404错误                status = "404 Not Found"                headers = []                start_response(status, headers)                return "not found"            else:                file_data = file.read()                file.close()                 status = "200 OK"                headers = []                start_response(status, headers)                return file_data.decode("utf-8")         for url, handler in self.urls:            #("/ctime", show_ctime)            if path == url:                return handler(env, start_response)         # 代表未找到路由信息,404错误        status = "404 Not Found"        headers = []        start_response(status, headers)        return "not found" def show_ctime(env, start_response):    status = "200 OK"    headers = [        ("Content-Type", "text/plain")    ]    start_response(status, headers)    return time.ctime() def say_hello(env, start_response):    status = "200 OK"    headers = [        ("Content-Type", "text/plain")    ]    start_response(status, headers)    return "hello itcast" def say_haha(env, start_response):    status = "200 OK"    headers = [        ("Content-Type", "text/plain")    ]    start_response(status, headers)    return "hello haha" urls = [            ("/", show_ctime),            ("/ctime", show_ctime),            ("/sayhello", say_hello),            ("/sayhaha", say_haha),        ]app = Application(urls)# if __name__ == "__main__":#     urls = [#             ("/", show_ctime),#             ("/ctime", show_ctime),#             ("/sayhello", say_hello),#             ("/sayhaha", say_haha),#         ]#     app = Application(urls)#     http_server = HTTPServer(app)#     http_server.bind(8000)#     http_server.start()

标签:

上一篇 :

下一篇 :

Python实现搭建-简单服务器教程 焦点快看

Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下:1 等待客户端的链接,服务器会收到一个http

04-18 16:45:23

4月18日*ST顺利现184.31万元大宗交易

近三个月该股共发生5笔大宗交易,合计成交2 27万手。该股近期无解禁股上市。

04-18 16:21:41

环球动态:淘宝分销做什么产品好_淘宝分销赚钱吗

1、一::1688打开首页搜索商品。2、:找到需要代销的商品。3、:打开任何商品,4、:检查供应商的投资要求。5、:符

04-18 16:14:38

赤水至贵阳自驾(赤水至贵阳自驾要多久)

1 赤水至贵阳自驾要多久这个要看你有几天时间,想去哪些景点,重庆→成渝高速→隆昌县→隆(昌)纳(溪)高

04-18 15:58:26

快资讯:汨汨流淌_汨汨

1、汩汩gugu:是指水流的声音或样子汨mi:是指一条河——汨罗江不知是否正确如有错误请谅解!。本文分享...

04-18 15:22:59

财政部:三方面着力 巩固经济回升势头 环球即时

财政部:三方面着力巩固经济回升势头,财政部,副司长,专项债券,经济回升,地方政府

04-18 15:23:15

天天快讯:暴雨、雷电、冰雹下午就到浙江!冷空气开始发力,气温将持续下降

昨天(17日)浙江多地打破4月最热记录最高气温为云和38 2℃云和、杭州、金华、衢州、诸暨等20个国家气象站

04-18 14:10:53

助力农户圆“安居梦” 张家港凤凰镇探索“组团式”农房翻建_环球热推荐

助力农户圆“安居梦”张家港凤凰镇探索“组团式”农房翻建

04-18 13:10:54

每日信息:港股半导体股走低 中芯国际跌近5%

【港股半导体股走低中芯国际跌近5%】财联社4月18日电,截至发稿,中芯国际(00981 HK)跌4 67%、上海复旦(

04-18 11:57:45

世界快消息!国家统计局:居民消费意愿有待进一步提升 下阶段要千方百计增加居民收入 积极增加优质供给

国新办于4月18日上午10时举行新闻发布会,国家统计局新闻发言人、国民经济综合统计司司长付凌晖介绍2023年

04-18 11:18:32

世界通讯!大学生创业贷款还不上怎么办?教你这样应对

如果大学生创业贷款还不上,可以采取以下方法:1、拟定详细的还款计划。2、寻求资金帮助。3、与贷款机构协

04-18 10:46:36

全球热头条丨东北军一个旅有多少人_东北军一个旅一共有多少人

欢迎观看本篇文章,小勉来为大家解答以上问题。东北军一个旅有多少人,东北军一个旅一共有多少人很多人还不

04-18 09:46:28

地毯挂钩和储物柜挂钩有什么区别? 焦点速讯

小地毯。工匠们使用地毯挂钩和储物柜挂钩技术制作枕头、地毯、阿富汗毛毯、壁挂、包和毛绒玩具。这些项目是

04-18 09:37:11

4月18日生意社废钢基准价为3009.88元/吨_最新消息

4月18日,生意社废钢基准价为3009 88元 吨,与本月初(3038 56元 吨)相比,下降了-0 94%。废钢年度统计(2022-04-18--2023

04-18 09:11:46

公司做网站的好处有哪些?

公司做网站后就相当于在网上有了一个广告宣传地址一样,可以在网上打广告,公司可以在网站上放公司LOGO,公

04-18 08:02:17

古蔺县气象台解除雷电黄色预警信号【III级/较重】 焦点快报

据国家突发事件预警信息发布网:古蔺县气象台2023年04月18日02时27分解除雷电黄色预警信号。

04-18 06:36:30

美记:威少和球迷争吵发生在看台 按照规则威少可能被禁赛 最资讯

美记:威少和球迷争吵发生在看台按照规则威少可能被禁赛,威少,停赛,美记,中场休息,自由球员

04-18 04:48:47

沃森生物:RQ3013以实现该产品的附条件批准上市为目标

同花顺金融研究中心4月17日讯,有投资者向沃森生物提问,16日全国健康与疫苗年会上国家疾控中心郑徽研究员

04-18 00:02:21

专家:乳腺癌防治迎新进展 但早诊早治仍是上策|全球速递

”王坤说,所有女性都要去做筛查,一般来说40岁以前的女性,每一年去做彩超,40岁以后的女性每年做彩超...

04-17 21:51:04

【当前独家】*ST博天(603603.SH)一季度归母净利润1032.71万元、同比增长111.88%

格隆汇4月17日丨*ST博天发布2023年第一季度报告,实现营业收入19414 56万元,同比增长11 72%;归母净利润10

04-17 20:19:52

非广州户灵活就业人员生育保险能领生育津贴吗?为什么不能?_当前关注

非广州户灵活就业人员生育保险能领生育津贴吗?领取条件是什么?社保网小编整理介绍不能,参加职工基本医疗

04-17 19:12:15

快报:央行1900亿新动作

4月17日,央行开展了1700亿元中期借贷便利(MLF)操作和200亿元7天期公开市场逆回购操作。中标利率分别为2

04-17 18:17:05

胡涛出席阜新市国土空间总体规划(2021—2035年)工作会议 焦点热文

胡涛出席阜新市国土空间总体规划(2021—2035年)工作会议

04-17 17:25:55

沪锡期货主力合约17日获资金流入超10亿元|环球实时

4月17日电,国内商品期货市场资金显著流入沪锡期货。截至15:00,沪锡期货主力合约日内获资金流入10 52亿元

04-17 16:32:25

这些汽车黑科技,你见过几个?_环球即时看

在智能座舱和智能化趋势下,像智能表面、AR-HUD、语音交互、手势交互、数字后视镜等汽车“黑科技”也在...

04-17 15:38:44

博彩股午后走强 美高梅中国涨超6% 世界最资讯

南方财经4月17日电,博彩股午后持续走强。截至发稿,美高梅中国涨超6%,永利澳门涨超3%。…

04-17 14:58:16

环球观察:弗洛尔的屠龙技术纲要 弗洛尔的屠龙纲要任务奖励?

弗洛尔的屠龙技术纲要《弗洛尔的屠龙技术纲要》是网络游戏《魔兽世界》中的一本书,能触发一个战士和圣

04-17 13:42:26

浙江小将冯思璇,世界冠军!

浙江小将冯思璇,世界冠军!

04-17 12:21:57

前沿资讯!森泰股份今日登陆创业板 核心产品高性能木塑复合材料占据中高端国际市场份额

中国网财经4月17日讯(记者单盛群)安徽森泰木塑集团股份有限公司(以下简称“森泰股份”)是一家专业从事木...

04-17 11:41:07

全球动态:Soul的灵魂社交,再次赴港上市会不一样吗?

“灵魂社交”的各种算盘,能不能敲开港交所的门?文 每日财报吕明侠近日,新型开放式社交平台Soul向港...

04-17 10:45:11

环球短讯!专访安本中国区总经理:未来持续增配中国是确定性趋势

专访安本中国区总经理:未来持续增配中国是确定性趋势,安本,中国,能源

04-17 10:11:30

宁的繁体字的写法图片 宁的繁体字的写法

今天来聊聊关于宁的繁体字的写法图片,宁的繁体字的写法的文章,现在就为大家来简单介绍下宁的繁体字的写法

04-17 09:23:06

热点聚焦:沈阳部分区域停电,有你家吗?

沈阳部分区域停电,有你家吗?

04-17 08:18:54

天天报道:【最新数据】这一国家,成全球最大液化天然气出口国→

当地时间4月15日,总部位于卡塔尔首都多哈的天然气出口国论坛发布“2023年度天然气市场报告”。报告显示...

04-17 06:33:59

描写山水美景的诗句_描写美景的诗句

1、1天净沙秋思元马致远枯藤老树昏鸦,小桥流水人家,古道西风廋马,夕阳西下,断肠人在天涯2寂寞梧桐,深院锁

04-17 02:53:58

世界今日讯!赏花游,带动山西乡村旅游回暖(图文)

随着春暖花开,山西各地以花为“媒”,大力发展乡村游、休闲游、红色游,提升乡村游品质——赏花的游客...

04-16 22:10:36

即时看!社保计算器怎么用?个人社保计算方法

社保计算器怎么用?个人社保计算方法社保网小编整理介绍个人社保计算方法:个人工资*8%是养老保险+个人工资

04-16 20:24:01

自定义Spring Cloud Sleuth的跟踪信息 全球热消息

SpringCloudSleuth是一个分布式跟踪系统,可以帮助开发人员追踪分布式系统中的请求流。默认情况下,Sleuth

04-16 18:32:23

全球快看点丨浙江小百花《苏秦》进京:以史诗之风唱念和平之愿

(记者高凯)4月15日与16日,浙江小百花越剧院出品、浙江小百花越剧团创演的新编历史剧《苏秦》,应邀进京参

04-16 16:54:03

男子吃自助餐取饮料每瓶都是山寨货:可乐变小可乐、芬达成芬橙

男子吃自助餐取饮料每瓶都是山寨货:可乐变小可乐、芬达成芬橙

04-16 15:22:56

徐州市中医院新院建设又有新进展

近日,位于云龙区大龙湖南岸的市城建重点工程徐州市中医院新院建设又有新进展。截至3月底,市中医院新院门

04-16 13:00:52

甘肃省发布2023年第1号总林长令_今日热文

甘肃省发布2023年第1号总林长令

04-16 11:12:16

首届骆马湖上相湾垂钓大赛开赛 百余位知名钓手齐聚宿迁|最资讯

(刘林刘登书杨广兵)最美人间四月天,争锋竞钓上相湾。大赛现场钓竿此起彼伏,鱼儿上下纷飞,钓手们在尽情享

04-16 09:59:53

全球观速讯丨敞开玩!500款游戏的游戏掌机仅需80元

小编今天向大家推荐的是一款游戏机,目前在京东售价99元,而且通过Plus价90和满90减10双重优惠活动,实付仅

04-16 07:56:07

恒大ems neo电脑版_hengdaems

1、点击左侧新建审批选择集团下的考勤目录里面会有外出、出差、请假等选项,按照你需要的选择后会进入一个

04-16 05:59:54

世界速递!武汉一户人家:因不要客厅而走红,全屋收纳力满满,那叫一个实用

武汉一户人家:因不要客厅而走红,全屋收纳力满满,那叫一个实用

04-16 01:18:33

口腔癌早期症状20种_口腔癌的早期症状有哪些_今亮点

1、如局部有长期溃疡性病变、下颌前突、明显疼痛感;有红斑和白斑,特别是溃疡或疣状改变;舌痛,明显的运

04-15 22:00:37

【大国基理】在“这里”,感受天津基层治理速度 当前聚焦

中新网天津4月15日电(记者谢艺观)4月11日,天大北五村社区第六网格网格员张鑫与社区志愿者在社区日常走访时

04-15 20:06:54

专家齐聚2023数字教育创新应用峰会,为推动区域数字产业创新发展建言献策_焦点热文

封面新闻记者吴雨佳4月14日,“2023数字教育创新应用峰会暨元宇宙中国行(福州站)城市论坛”上,科技、...

04-15 18:14:16

冬季怎样打扮 冬天怎么穿才好看-今日关注

1、中长款到小腿的位置,到小腿中部的衣服长度,能够呈现出利落的感觉,充分展现出身材优势,但是又不会有

04-15 17:02:17

4月18日*ST顺利现184.31万元大宗交易
环球动态:淘宝分销做什么产品好_淘宝分销赚钱吗
赤水至贵阳自驾(赤水至贵阳自驾要多久)
快资讯:汨汨流淌_汨汨
财政部:三方面着力 巩固经济回升势头 环球即时
天天快讯:暴雨、雷电、冰雹下午就到浙江!冷空气开始发力,气温将持续下降
助力农户圆“安居梦” 张家港凤凰镇探索“组团式”农房翻建_环球热推荐
每日信息:港股半导体股走低 中芯国际跌近5%
世界快消息!国家统计局:居民消费意愿有待进一步提升 下阶段要千方百计增加居民收入 积极增加优质供给
世界通讯!大学生创业贷款还不上怎么办?教你这样应对
全球热头条丨东北军一个旅有多少人_东北军一个旅一共有多少人
地毯挂钩和储物柜挂钩有什么区别? 焦点速讯
4月18日生意社废钢基准价为3009.88元/吨_最新消息
公司做网站的好处有哪些?
古蔺县气象台解除雷电黄色预警信号【III级/较重】 焦点快报
美记:威少和球迷争吵发生在看台 按照规则威少可能被禁赛 最资讯
沃森生物:RQ3013以实现该产品的附条件批准上市为目标
专家:乳腺癌防治迎新进展 但早诊早治仍是上策|全球速递
【当前独家】*ST博天(603603.SH)一季度归母净利润1032.71万元、同比增长111.88%
非广州户灵活就业人员生育保险能领生育津贴吗?为什么不能?_当前关注
快报:央行1900亿新动作
胡涛出席阜新市国土空间总体规划(2021—2035年)工作会议 焦点热文
沪锡期货主力合约17日获资金流入超10亿元|环球实时
这些汽车黑科技,你见过几个?_环球即时看
博彩股午后走强 美高梅中国涨超6% 世界最资讯
环球观察:弗洛尔的屠龙技术纲要 弗洛尔的屠龙纲要任务奖励?
浙江小将冯思璇,世界冠军!
前沿资讯!森泰股份今日登陆创业板 核心产品高性能木塑复合材料占据中高端国际市场份额
全球动态:Soul的灵魂社交,再次赴港上市会不一样吗?
环球短讯!专访安本中国区总经理:未来持续增配中国是确定性趋势
宁的繁体字的写法图片 宁的繁体字的写法
热点聚焦:沈阳部分区域停电,有你家吗?
天天报道:【最新数据】这一国家,成全球最大液化天然气出口国→
描写山水美景的诗句_描写美景的诗句
世界今日讯!赏花游,带动山西乡村旅游回暖(图文)
即时看!社保计算器怎么用?个人社保计算方法
自定义Spring Cloud Sleuth的跟踪信息 全球热消息
全球快看点丨浙江小百花《苏秦》进京:以史诗之风唱念和平之愿
男子吃自助餐取饮料每瓶都是山寨货:可乐变小可乐、芬达成芬橙
徐州市中医院新院建设又有新进展
甘肃省发布2023年第1号总林长令_今日热文
首届骆马湖上相湾垂钓大赛开赛 百余位知名钓手齐聚宿迁|最资讯
全球观速讯丨敞开玩!500款游戏的游戏掌机仅需80元
恒大ems neo电脑版_hengdaems
世界速递!武汉一户人家:因不要客厅而走红,全屋收纳力满满,那叫一个实用
口腔癌早期症状20种_口腔癌的早期症状有哪些_今亮点
【大国基理】在“这里”,感受天津基层治理速度 当前聚焦
专家齐聚2023数字教育创新应用峰会,为推动区域数字产业创新发展建言献策_焦点热文
冬季怎样打扮 冬天怎么穿才好看-今日关注
人过五十,请你“狠心”一点,避免后半生凄凉!-环球时快讯
X 广告
行业动态
X 广告

Copyright ©  2015-2022 华南植物网版权所有  备案号:粤ICP备18025786号-52   联系邮箱: 954 29 18 82 @qq.com