21.12 Python 实现网站服务器

这篇具有很好参考价值的文章主要介绍了21.12 Python 实现网站服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Web服务器本质上是一个提供Web服务的应用程序,运行在服务器上,用于处理HTTP请求和响应。它接收来自客户端(通常是浏览器)的HTTP请求,根据请求的URL、参数等信息生成HTTP响应,并将响应返回给客户端,完成客户端的请求。Web服务器可以使用多种编程语言和技术实现,通过对套接字的处理并遵循HTML等浏览器兼容格式即可实现。

如果需要自行实现一个Web服务器则本质上就是需要完成套接字的处理,并在处理时增加遵循HTTP格式的头部数据即可,如下是一个简单的支持Web服务器的套接字程序,该程序运行后会在本机的80端口侦听,当用于通过浏览器访问时则会自动传输一段话。

import socket

def handle_request(client):
    buf = client.recv(1024)
    client.send(bytes("HTTP/1.1 200 OK\r\n\r\n","UTF-8"))
    client.send(bytes("<b>Hello lyshark</b>","UTF-8"))

if __name__ == "__main__":
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(("localhost",80))
    sock.listen(5)

    while True:
        connection, address = sock.accept()
        handle_request(connection)
        connection.close()

运行上述代码片段,读者可自行打开浏览器并访问http://localhost:80端口,则此时会弹出一段问候语,说明我们的服务器已经可以被浏览器解析了。

21.12 Python 实现网站服务器,《灰帽黑客:攻守道》,python,服务器,开发语言,Web服务器

当然上述代码还有很大的优化空间,首先要解决的问题是让页面具有动态渲染的功能,此处我们可以采用jinja2模板,该模板允许在Web应用程序中渲染HTML,其主要特点是可配置性高、快速、安全且易于使用,使用时读者需要自行执行pip install jinja2来安装此模板,至此我们就可以在Web服务器带啊吗中使用模板引擎进行输出。

如下代码片段则是一个使用了make_server类的服务器实现,在代码中我们定义了一个url_func列表用于存储路由规则,路由规则代表的是当有浏览器访问服务器时则自动使用特定规则内的特定函数处理这个规则,在代码中我们分别定义了两个路由函数,其中index()用于展示首页信息,而jinja()则用于展示模板渲染功能实现,至此读者需要在主目录下分别创建两个文件index.html代表网站主页,而jinja.html则代表模板渲染页面,我们以jinja.html为例创建如下代码;

<body>
<h1>{{name}}</h1>
<ul>
    {% for item in user_list %}
    <li>{{item}}</li>
    {% endfor %}
</ul>
</body> 

接着编写服务器程序,在jinja()路由函数内通过读取jinja.html文件并使用template.render()函数给特定的变量传入不同的参数,当页面渲染好以后,则通过return将该请求返回给RunServer函数,再由该函数return [response,]返回给被调用客户。

from wsgiref.simple_server import make_server
from jinja2 import Template

# /index/的路由函数
def index():
    with open("./index.html","r",encoding="utf-8")as fp:
        recv = fp.read()
    return recv.encode("utf-8")

# /jinja/的路由函数
def jinja():
    with open("./jinja.html","r",encoding="utf-8")as fp:
        data = fp.read()
        template = Template(data)
        recv = template.render(name='John Doe', user_list=['lyshark', 'wang'])
        return recv.encode("utf-8")

# 定义路由规则
url_func = [
    ('/index/',index),('/jinja/',jinja)]

def RunServer(environ,star_response):
    star_response("200 OK",[('Content-Type','text/html;charset=urf-8')])
    url = environ["PATH_INFO"]
    rAddr = environ["REMOTE_ADDR"]
    rHost = environ["HTTP_HOST"]
    print("[+] 根域名: {} 路径: {} 目标IP: {}".format(rHost,url,rAddr))
    func = None
    for i in url_func:
        if i[0] == url:
            func = i[1]
            break
    if func:
        response = func()
    else:
        response = b"** 404 not found **"
    return [response,]

if __name__ == "__main__":
    httpd = make_server("0.0.0.0",80,RunServer)
    print("[*] 服务已启动 0.0.0.0:80")
    httpd.serve_forever()

运行上述代码,读者可以打开浏览器并访问localhost/jinja/路径,此时即可看到经过选然后的HTML页面,如下图所示;

21.12 Python 实现网站服务器,《灰帽黑客:攻守道》,python,服务器,开发语言,Web服务器文章来源地址https://www.toymoban.com/news/detail-736832.html

到了这里,关于21.12 Python 实现网站服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1.12.C++项目:仿muduo库实现并发服务器之LoopThreadPool模块的设计

    1.线程数量可配置(0或多个) 2. 对所有的线程进行管理,其实也就是管理0个或多个LoopThread对象! 3. 提供线程分配的功能! 针对LoopThread设计一个线程池,便于管理。 对所有的LoopThread进行分配和管理! 1.线程数量可配置(0或多个) 注意事项:在服务器中,主从Reactor模型是

    2024年02月07日
    浏览(47)
  • iis配置网站服务器配置端口,如何实现IIS多个网页同一个端口?

    在Internet Information Services (IIS) 中配置多个网站共用同一个端口是可能的,但需要进行一些特定的配置。以下是实现这一目标的一般步骤: 创建多个网站: 首先,您需要在 IIS 中创建多个不同的网站。每个网站应该有自己的根目录和内容。 绑定共享端口: 在每个网站的配置中

    2024年02月13日
    浏览(71)
  • python实现/直播服务器/聊天服务器/的多种解决方案

    在Python中,您可以使用以下技术栈来实现直播服务器: Flask:Flask是一个轻量级的Web框架,可用于构建直播服务器的后端。您可以使用Flask编写API端点来处理直播流的控制和管理。 Django:Django是一个功能强大的Web框架,提供了许多内置功能和插件,可用于构建复杂的直播服务

    2024年02月11日
    浏览(43)
  • python实现UDP服务器

    import socket   # 创建UDP socket udp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)   # 绑定地址和端口 server_address = (\\\'localhost\\\', 12000) udp_server_socket.bind(server_address)   # 服务器循环 while True:     # 接收客户端消息     message, client_address = udp_server_socket.recvfrom(1024)     print(f\\\"Received

    2024年04月27日
    浏览(40)
  • 宝塔反代教程,ChatGPT网站系统实现国内服务器访问openai官网接口(使用宝塔反代openai官方的API接口教程)

    近期有网友问宝塔如何设置反向代理,小编这里介绍一种简单的操作方法,就是使用宝塔官方软件面板自带的反向代理功能来实现。首先您要先安装宝塔面板,当Nginx或LNMP环境配置完成后,便可开始设置反向代理了,下面来看下操作步骤。 此方法最简单快捷,没有复杂步骤,

    2024年02月06日
    浏览(57)
  • Python实现搭建-简单服务器教程

    Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下: 1.等待客户端的链接,服务器会收到一个http协议的请求数据报 2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文件的环境) 3.提取出文件的环境之后,利用截断取片的方法将文件名转化为模块

    2023年04月18日
    浏览(37)
  • 腾讯云轻量服务器和云服务器区别12点不同之处

    关于腾讯云轻量应用服务器和云服务器CVM的区别,之前腾讯云百科写过一篇文章来对比,阿腾云又更新了一篇新的区别对比文章,比之前的要更加详细,包括轻量服务器的使用限制、CPU型号、公网限制月流量、内网连通性、硬盘存储等多方面对比: 目录 腾讯云轻量应用服务

    2023年04月08日
    浏览(55)
  • 信息收集 - 网站服务器

    操作系统 区分大小写: 如果修改首页或其他页面的大小写后,网站返回一个错误页面,例如报错 \\\"404 Not Found\\\" 或类似的错误,这可能意味着网站运行在 Linux 或类 Unix 操作系统上。这是因为大多数 Linux 系统是区分大小写的 。 如果修改大小写后,网站页面正常显示,这可能意

    2024年02月21日
    浏览(44)
  • 服务器网站搭建(一)

    一台服务器,我买的腾讯云新加坡的。根据需求选择配置。 重置密码: 自己设置的密码要记住: 登录: 安装宝塔(centos系统),参考官网: 执行命令: 如下,遇到选择就输入y回车: 最后输出如下,请复制保存到一个文档,下次登录直接复制账号密码即可: 回到服务器,打

    2024年02月08日
    浏览(52)
  • Web网站服务器

    目录 一、什么是Apache? 二、虚拟目录是什么? 三、Apcahe相关配置文件 四、httpd.conf主配置文件的常用配置参数 五、Web网站配置案例 5.1搭建基于用户的个人主页网站 5.2、配置虚拟目录 5.3、配置虚拟主机 5.3.1搭建两个基于IP地址的虚拟主机 5.3.2搭建两个基于域名的站点 5.3.3搭建

    2024年02月10日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包