Python之HTTP静态Web服务器开发

众所周知,Http协议是基于Tcp协议的基础上产生的浏览器到服务器的通信协议 ,其根本原理也是通过socket进行通信。

使用HTTP协议通信,需要注意其返回的响应报文格式不能有任何问题。

响应报文,一共包括4个部分,分别是响应行,响应头,空行,响应体,并且每项数据之间必须使用/r/n隔开。

空行是区分响应头和响应体的必要数据,不能省略。

HTTP静态Web服务器主要开发思路如下:

1.导入socket模块

2.创建socket对象

3.设置端口复用,解决端口阻塞问题

4.绑定端口及ip

5.设置监听,注意:设置监听成功后,原socket变成被动套接字,不能够进行数据的收发。

6.等待客户端(浏览器)链接(发送请求)

7.使用链接成功后返回的新socket进行数据的收发。

注意:此处返回数据应为HTTP响应报文。

 1 # 1.导入模块
 2 import socket
 3
 4
 5 def main():
 6     # 2.创建socket对象
 7     server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 9     # 3.设置端口复用
10     server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
11     # 4.绑定端口
12     server_socket.bind((‘‘, 8001))
13     # 5.设置监听
14     server_socket.listen(128)
15     # 设置循环接收客户端连接,实现多客户端连接
16     while True:
17         # 6.接收客户端连接
18         client_socket, ip_port = server_socket.accept()
19         print("客户端:%s 上线了,使用端口为:%s" % ip_port)
20         # 7.接收数据
21         recv_data = client_socket.recv(1024).decode(‘utf-8‘)
22         if recv_data:
23             # print(‘接收的数据为:‘, recv_data)
24             # 获取http请求报文中的指定路径
25             # split()方法不指定参数时,默认以空白字符(\t,\n,空格)分割
26             # 获取到的路径信息分割后,会形成三部分存放到列表中
27             # 1.请求提交的方式:GET/POST
28             # 2.请求路径信息及参数信息
29             # 3.HTTP协议及版本
30             page_recv_data = recv_data.split()[1]
31             print(‘请求的资源路径为:‘, page_recv_data)
32             # 判断接受到的路径信息是否包含参数
33             # HTTP协议中,参数格式为:/index.html?name=666&age=12
34             if ‘?‘ in page_recv_data:
35                 real_recv_page = page_recv_data.split(‘?‘)[0]
36             else:
37                 real_recv_page = page_recv_data
38             try:
39                 # 8.发送数据
40
41                 # 接收指定的路径信息,并读取文件信息
42                 # 注意f-string只能在3.6及以上版本使用
43                 data = f‘static{real_recv_page}‘
44                 print(data)
45                 with open(data, ‘rb‘) as file:
46                     page_data = file.read()
47             except:
48                 # 8.1 当文件不存在时,编写HTTP协议如下格式:
49                 http_line = ‘HTTP/1.1 / 404 NOT FOUND\r\n‘
50                 http_header = ‘Server: PWS/1.0\r\n‘
51                 http_body = ‘<h1>Page Not Found!</h1>‘
52                 send_data = (http_line + http_header + ‘\r\n‘ + http_body).encode()
53                 client_socket.send(send_data)
54             else:
55                 # 8.1 当文件存在时,编写HTTP协议如下格式:
56                 http_line = ‘HTTP/1.1 / 200 ok\r\n‘
57                 http_header = ‘Server: PWS/1.0\r\n‘
58                 send_data = (http_line + http_header + ‘\r\n‘).encode() + page_data
59                 client_socket.send(send_data)
60             finally:
61                 # 断开与客户端连接
62                 client_socket.close()
63         else:
64             print(‘客户端:%s,端口号:%s 下线了‘ % ip_port)
65             break
66
67     # 9.关闭套接字
68     # 关闭服务器
69     # server_socket.close()
70
71
72 # 入口
73 if __name__ == ‘__main__‘:
74     main()

原文地址:https://www.cnblogs.com/chao666/p/12008315.html

时间: 2024-08-03 03:34:55

Python之HTTP静态Web服务器开发的相关文章

多线程静态Web服务器开发小试(java)

多线程静态Web服务器(原创)Java版本 克服内存溢出问题采用缓冲式输出 文件一:HttpWebServerOfLcl.java package com.cn.lcl; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.Input

04-HTTP协议和静态Web服务器

一.HTTP协议(HyperText Transfer Protocol) 超文本传输协议,超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片.音乐.视频.超链接等等都属于超文本.    传输 HTTP 协议格式的数据是基于 TCP 传输协议的,发送数据之前需要先建立连接. 作用: 它规定了浏览器和 Web 服务器通信数据的格式,也就是说浏览器和web服务器通信需要使用http协议. 小结: * HTTP协议是一个超文本传输协议 * HTTP协议是一个基于TCP传输协议传输数据的 *

python超简单的web服务器

今天无意google时看见,心里突然想说,python做web服务器,用不用这么简单啊,看来是我大惊小怪了. web1.py 1 2 3 #!/usr/bin/python import SimpleHTTPServer SimpleHTTPServer.test() web2.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/usr/bin/python import SimpleHTTPServer import SocketServer

nginx配置静态web服务器

配置静态的web,需要实现一个虚拟主机. step1: 准备工作 1  查看你的网卡地址(我的 192.168.223.135) #ifconfig 我们这里建立两个web服务器,所以增加一个网卡地址. #ifconfig eth0:0  192.168.223.145 2 建立两个站点目录 #mkdir  /var/tmp/website1 #mkdir  /var/tmp/website2 3 建立两个日志目录 #mkdir  /var/tmp/log/website1 #mkdir  /v

python自带的web服务器

python自带的web服务器 python自带的包可以建立简单的web服务器 BaseHTTPServer 提供基本的web服务和处理类 SimpleHTTPServer 包含执行get请求的SimpleHTTPRequestHandler类 CGIHTTPServer 包含处理POST请求和执行的CGIHTTPRequestHandler类 执行语句:python -m CGIHTTPServer 8081 原文地址:https://www.cnblogs.com/themost/p/845

python搭建简单的web服务器

由于要做自动化和性能测试,工作中需要有一个能够控制返回消息数据的web服务器,所以用python初步实现了一个简单的web服务器,能够处理HTTP的请求(GET,POST,PUT),并完成响应.先简单说明下原理,python中实现web服务器大概分两个步骤: 1.      创建一个套接字,绑定到指定的IP和端口,保持监听 2.      创建一个handle类,当收到请求消息时,作出响应 主要使用的类有两个: HTTPServer:HTTP服务器的基类,提供了HTTP服务器的常用方法,创建服务

Linux下Web服务器开发

学习提示: 1. 在"桌面环境"中动手练习,若环境不流畅可选择WebIDE或字符界面. 2. 在教程下方"课程问答"中提出问题,或"共享桌面"寻求远程帮助. 3. 在教程下方"实验报告"中完成作业,记录心得.公开报告可以获得大家点评. 4. 在"我的代码库"中用GIT提交你的实验代码. Web服务器 The way to learn a programming language is to write pr

跟我学Node高性能Web服务器开发

课程学习地址:http://www.xuetuwuyou.com/course/235课程出自学途无忧网:http://www.xuetuwuyou.com 课程主要讲授了时下热门的Node开发,内容包括但不限于:Node基本环境开发配置,Node模块Module机制,利用Express快速搭建Node Web服务器.MongoDB.Node+MongoDB进行数据持久化操作--,全程案例贯穿,无废话,授课直奔主题! 原文地址:http://blog.51cto.com/7420009/2085

Web服务器开发

服务器是C/S模式的核心,最近在看网络编程的东西,参考了一些书籍,做了一个Web服务器.整体的实现分为四个部分:界面控制.服务流程的实现.HTTP协议的实现.协议的辅助实现部分. 界面控制部分 主窗体设计比较简陋, Web服务器的运行离不开HTTP协议,定义一个类CHttpProtocol,用来实现HTTP协议. class CHttpProtocol { public: HWND m_hwndDlg; SOCKET m_listenSocket; map<CString, char *> m