web服务器02-返回用户指定页面
2018-01-07 23:16
218 查看
import socket
import re
# 创建处理客户端函数
def request_handler(cliect_socket):
# 接收用户请求
recv_data = client_socket.recv(4096)
if not recv_data:
print("客户端断开连接")
client_socket.close()
return 如果客户端已经断开连接 则不需要再执行后续代码 直接结束函数即可
# 解码数据 请求报文数据
recv_str_data = recv_data.decode()
# 利用正则表达式截取 用户路径 #GET /index2.html HTTP/1.1\r\n
ret = re.match(r"[^/]+([^ ]+)", recv_str_data) #利用正则提取/xxx.html
path_info = ret.group(1)
try: # 尝试打开用户需要的文件, 不存在则抛出异常
with open("./static" + path_info, "rb") as file:# with 语句 自动将对象的资源惊醒释放--> 上下文管理
file_deta = file.read() #
except Exception as e: #如果在try部份引发了名为'name'的异常,则执行这段代码
# 响应行 响应头 响应体 版本号 状态码
response_line = "HTTP/1.1 404 OK\r\n"
response_header = "Server: PythonServer1.0\r\n"
response_body = "ERROR"
# 响应报文数据的拼接
response_data = response_line + response_header + "\r\n" + response_body
client_socket.send(response_data.encode())
else:#如果没有异常发生,则执行这段代码
response_line = "HTTP/1.1 200 OK\r\n"
response_header = "Server: PythonServer1.0\r\n"
response_body = file_deta
response_deta = (response_line +response_header + "\r\n").encode() + response_body
client_socket.send(response_deta)
#发送响应报文
finally: #关闭
client_socket.close()
if __name__ == '__main__':
# 创建服务器套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 地址重用 (1设置, 0取消)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定端口
server_socket.bind(("", 8888))
# 监听
server_socket.listen(128)
# 服务器从客户端接受一个
while True:
client_socket, client_address = server_socket.accept()
# 打印一下接收ip
print("服务器接收到%s的链接" % str(client_address))
request_handler(client_socket)
import re
# 创建处理客户端函数
def request_handler(cliect_socket):
# 接收用户请求
recv_data = client_socket.recv(4096)
if not recv_data:
print("客户端断开连接")
client_socket.close()
return 如果客户端已经断开连接 则不需要再执行后续代码 直接结束函数即可
# 解码数据 请求报文数据
recv_str_data = recv_data.decode()
# 利用正则表达式截取 用户路径 #GET /index2.html HTTP/1.1\r\n
ret = re.match(r"[^/]+([^ ]+)", recv_str_data) #利用正则提取/xxx.html
path_info = ret.group(1)
try: # 尝试打开用户需要的文件, 不存在则抛出异常
with open("./static" + path_info, "rb") as file:# with 语句 自动将对象的资源惊醒释放--> 上下文管理
file_deta = file.read() #
except Exception as e: #如果在try部份引发了名为'name'的异常,则执行这段代码
# 响应行 响应头 响应体 版本号 状态码
response_line = "HTTP/1.1 404 OK\r\n"
response_header = "Server: PythonServer1.0\r\n"
response_body = "ERROR"
# 响应报文数据的拼接
response_data = response_line + response_header + "\r\n" + response_body
client_socket.send(response_data.encode())
else:#如果没有异常发生,则执行这段代码
response_line = "HTTP/1.1 200 OK\r\n"
response_header = "Server: PythonServer1.0\r\n"
response_body = file_deta
response_deta = (response_line +response_header + "\r\n").encode() + response_body
client_socket.send(response_deta)
#发送响应报文
finally: #关闭
client_socket.close()
if __name__ == '__main__':
# 创建服务器套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 地址重用 (1设置, 0取消)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定端口
server_socket.bind(("", 8888))
# 监听
server_socket.listen(128)
# 服务器从客户端接受一个
while True:
client_socket, client_address = server_socket.accept()
# 打印一下接收ip
print("服务器接收到%s的链接" % str(client_address))
request_handler(client_socket)
相关文章推荐
- (原创)如何让web页面产生服务器数据返回后仍然能够保留到用户输入的位置!
- Web页面获取用户控件页面中服务器控件的值
- 极光推送 根据服务器返回内容跳转指定页面
- java请求WEB服务器 获取页面返回,且支持HTTPS,获取cret证书
- web 开发,个人中心每个请求,判断用户是否登录,若没有登录,则跳转到登录页面,登录成功后返回之前页面
- web页面取用户控件页面中服务器控件的值
- 自己动手实现web服务器1.0版本-返回固定页面
- python---ftplib,ftp使用,ftp破解用户与密码,ftp服务器查找web页面
- 在web服务器上,有些pdf, 怎么让用户在页面上点击一个按钮,就直接打印?
- JS代码,将终端用户(Web 页面的查看者)的计算机时间置于一个按钮 Web 服务器控件上
- 如何获得web view上的关闭按钮返回指定页面
- HTTP协议中GET、POST和HEAD的介绍 2008-05-10 14:15 GET: 请求指定的页面信息,并返回实体主体。 HEAD: 只请求页面的首部。 POST: 请求服务器接受所指定的文
- 禁止页面回退到某个页面(如避免登录成功的用户返回到登录页)
- HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面
- 授权指定用户 从任何机器可访问 mysql服务器
- iOS 在App内返回到指定页面
- IIS架设WebService服务端的基本错误:由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面。
- 利用SQLDMO返回SQL服务器指定的目录列表
- Sys.WebForms.PageRequestManagerServerErrorException: 在服务器上处理请求时出现未知错误。服务器返回的状态码为: 500
- 使用列表组织WebView解决返回页面总是刷新的问题