【Python】快速创建一个简易 HTTP 服务器(http.server)
创始人
2024-09-25 22:49:01
0

目录

  • 官方文档
  • 安装
  • 教程
    • 用命令行创建
    • 编写代码创建
  • 实例

官方文档

http.server

警告: http.server 不推荐用于生产环境。它仅仅实现了 basic security checks 的要求。

安装

Python3 内置标准模块,无需安装。(在之前的 Python2 版本名称是 SimpleHTTPServer)

教程

用命令行创建

http.server 支持以 Python 解释器的 -m 参数直接调用。

通过执行如下命令创建一个最简单的 HTTP 服务器:

python -m http.server 

服务器默认监听端口是 8000,支持自定义端口号:

python -m http.server 9000 

服务器默认绑定到所有接口,可以通过 -b/–bind 指定地址,如本地主机:

python -m http.server --bind 127.0.0.1 

服务器默认工作目录为当前目录,可通过 -d/–directory 参数指定工作目录:

python -m http.server --directory /tmp/ 

通过在命令行传入 --cgi 参数,可以启用 CGIHTTPRequestHandler :

python -m http.server --cgi 

警告: CGIHTTPRequestHandler 和 --cgi 命令行选项不可供不受信任的客户端使用且容易受到恶意利用。 应当始终在安全的环境中使用。

编写代码创建

http.server 也支持在代码中调用,导入对应的类和函数即可。

from http.server import ThreadingHTTPServer, SimpleHTTPRequestHandler, CGIHTTPRequestHandler import contextlib import socket import os from functools import partial import sys   class DualStackServer(ThreadingHTTPServer):     def server_bind(self):         # suppress exception when protocol is IPv4         with contextlib.suppress(Exception):             self.socket.setsockopt(                 socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)         return super().server_bind()   def run(server_class=DualStackServer,         bind='127.0.0.1',         port=8000,         cgi=False,         directory=os.getcwd()):      if cgi:         handler_class = CGIHTTPRequestHandler     else:         handler_class = partial(SimpleHTTPRequestHandler, directory=directory)      with server_class((bind, port), handler_class) as httpd:         print(             f'Serving HTTP on {bind} port {port} '             f'(http://{bind}:{port}/) ...'         )         try:             httpd.serve_forever()         except KeyboardInterrupt:             print('\nKeyboard interrupt received, exiting.')             sys.exit(0)   if __name__ == '__main__':     run()  
  • server_class:服务器类
  • handler_class:请求处理类
  • bind:IP
  • port:端口
  • cgi:是否启用 CGI 请求处理程序
  • directory:工作目录

实例

既然我们已经知道了 http.server 能够快速地创建一个 HTTP 服务器,那么它能应用到哪些项目场景?

  1. 小型 web 项目在局域网内的预览
  • 项目目录
web:. ├─index.html 
  • index.html
            Title   Hello World   
  • 切换到目录 cd web,执行命令 python -m http.server,浏览器地址栏输入 localhost:8000,显示:
Hello World 

对于局域网的其他用户,可通过你的主机 IP + 端口号访问,如你的主机 IP 是 192.168.0.1,那么将网址 192.168.0.1:8000 发送给你的同事或同学,他们也可以看到 index.html 文件渲染的内容。

  1. 在本地浏览器访问远程服务器的端口映射

如果通过 VSCode 连接远程服务器,使用 http.server 开启一个端口后,会自动映射到本地,这样在本地浏览器就能查看和下载远程服务器资源。(除 VSCode 外,其他工具应该也可以实现远程与本地的端口映射)

相关内容

热门资讯

安卓系统 ios系统那个好用吗... 说到手机操作系统,安卓系统和iOS系统绝对是两大巨头,它们各有各的特色,让人挑花了眼。那么,安卓系统...
安卓系统和ios系统的安全,安... 你知道吗?在智能手机的世界里,安卓系统和iOS系统就像是一对双胞胎,各有各的特色,也各有各的粉丝。不...
优巡安卓系统下载,轻松体验智能... 你有没有想过,手机系统就像是手机的灵魂呢?它决定了你的手机能做什么,不能做什么。今天,就让我来带你一...
爱快系统是安卓,安卓生态下的智... 你知道吗?在安卓系统的大千世界里,有一个特别的存在,那就是爱快系统。它就像是一股清流,在众多安卓系统...
wp手机安卓子系统,探索跨平台... 你有没有发现,最近WP手机在安卓子系统的世界里掀起了一股小小的热潮呢?没错,就是那个曾经风靡一时的W...
安卓刷7.0系统教程,安卓7.... 你有没有想过给你的安卓手机来个焕然一新的变身?没错,就是升级到最新的7.0系统!这不仅仅是一个简单的...
安卓系统如何去除水印,轻松恢复... 手机屏幕上突然出现的水印,是不是让你觉得心情瞬间down到了谷底?别急,今天就来教你几招,轻松去除安...
音王点歌系统安卓,打造个性化音... 你有没有想过,在聚会或者K歌的时候,不用再手忙脚乱地翻找歌曲,直接通过手机就能轻松点歌?今天,就让我...
安卓怎样切换苹果系统,操作指南... 你有没有想过,有一天你的安卓手机突然变成了苹果手机,那会是怎样的体验呢?别惊讶,这可不是天方夜谭,现...
安卓系统证书生成,从基础到实践 你有没有想过,为什么你的安卓手机里那么多应用都能无缝运行?这其中,安卓系统证书可是功不可没的小英雄呢...
真我是安卓系统嘛,揭秘安卓系统... 亲爱的读者,你是否曾好奇过,自己手中的安卓手机,它的“灵魂”究竟是不是安卓系统呢?这个问题听起来可能...
rom修改安卓系统修改,基于R... 你有没有想过,你的安卓手机其实可以变得更有个性,更符合你的使用习惯呢?没错,这就是我要跟你分享的——...
黑莓微信 安卓系统,畅享智能沟... 亲爱的手机控们,今天我要和你聊聊一个特别的话题——黑莓微信在安卓系统上的那些事儿。你知道吗,黑莓这个...
安卓系统老是进不去,深入解析无... 手机屏幕上那个熟悉的安卓系统图标,怎么就突然变得高冷起来,让你怎么也进不去呢?别急,别慌,今天就来给...
安卓系统怎么安装字体,安卓系统... 你有没有发现,手机上的字体有时候真的让人看得很累眼呢?尤其是安卓系统,默认的字体有时候显得有点单调。...
真我系统5.0安卓14,安卓1... 你知道吗?最近手机界可是掀起了一股热潮,那就是真我系统5.0安卓14的发布。这款系统不仅带来了全新的...
华为平板安卓13系统,智能升级 亲爱的读者们,你是否也像我一样,对科技新品的到来充满期待?今天,我要和你聊聊一个让人兴奋的话题——华...
安卓系统激活码,激活码引领个性... 你有没有遇到过这种情况?手机买回来,兴奋地打开,却发现需要输入一个神秘的“安卓系统激活码”才能畅享所...
保时捷如何改回安卓系统,保时捷... 你有没有想过,你的保时捷汽车,那个高贵典雅的座驾,竟然也能变身成为安卓系统的超级战士?没错,就是那个...
32位安卓手机系统,性能与兼容... 你有没有发现,现在的手机更新换代速度简直就像坐上了火箭!这不,最近32位安卓手机系统又成了大家热议的...