Python3 SimpleHTTPServer的完整指南

12,704 阅读6分钟

网络服务器无处不在。甚至你现在就在与之互动!

无论你是哪种类型的软件工程师,你都必须在你的道路上的某个时刻与网络服务器打交道。

也许你正在为一个后端服务建立API服务器,或者你只是在为你的网站配置一个Web服务器。

如果你想快速测试你的本地静态文件,并且不希望Apache的混乱,Python可以帮助你在短时间内创建一个服务器;你所需要的就是在你的系统上安装Python。

Python 有一个内置的模块,叫做 SimpleHTTPServer,换句话说,它是一个简单的 HTTP 服务器,给你提供标准的 GET 和 HEAD 请求处理程序。

内置 HTTP 服务器的一个好处是,你不需要安装和配置任何东西。你唯一需要的是安装Python。

如果你使用的是Python 2,那么SimpleHTTPServer 就很有用。然而,如果你的机器使用Python3,你需要使用http.server模块。

什么是HTTP服务器

一个HTTP web服务器只不过是在你的机器上运行的进程,它正好做两件事。

  1. 在一个特定的TCP套接字地址(IP地址和端口号)上监听传入的http请求
  2. 它处理这个请求,并向用户发送一个响应。

当你打开Chrome浏览器,在地址栏中输入google.com,你会在浏览器窗口中看到谷歌的主页。

但是,刚才在引擎盖下发生了什么?

发生了很多事情,但为了简单起见,我将抽象出一些细节,在一个非常高的水平上谈论这个问题。

在高层次上,当你在浏览器上输入google.com 时,你的浏览器将创建一个称为HTTP请求的网络信息。

这个HTTP请求将被传送到谷歌的一台电脑上,该电脑上运行着网络服务器。

这个HTTP网络服务器将拦截你的请求,并通过回应谷歌主页的HTML来处理它。

最后,浏览器将这个HTML渲染到屏幕上,你在屏幕上看到的就是这个HTML。

此后与谷歌主页的每一次互动(例如,当你点击一个链接时)都会启动一个新的请求和响应,与第一个请求和响应完全一样。

重申一下,收到http请求的机器上运行着称为网络服务器的软件进程。

那个 web 服务器负责拦截这些请求适当地处理它们

Python3 SimpleHTTPServer

Python3 SimpleHTTPServer 是一个内置的 HTTP 服务器,在其中你不需要安装和配置任何东西。因此,SimpleHTTPServer是一个非常方便的工具。你可以使用Python SimpleHTTPServer将任何目录变成一个简单的HTTP网络服务器。SimpleHTTPServer模块带有一个简单的HTTP服务器,提供标准的GET和HEAD请求处理程序。

SimpleHTTPServer模块可以把你系统中的任何目录变成一个网络服务器。你需要在终端键入一个单行命令来实现这个HTTP服务器。

Python SimpleHTTPServer只支持两种HTTP方法--GET和HEAD。所以它是一个在网络上共享文件的优秀工具。

在Python 3中,Python SimpleHTTPServer已经被迁移到python http.server模块中,我们今天将学习这两个模块,看看使用它们是多么容易。例如,如果你想在默认的8000端口上启动一个服务器,请输入以下命令:

python -m SimpleHTTPServer

你可以通过绕过上述命令中的参数中的端口来改变默认端口:

python  -m SimpleHTTPServer [port]

Python SimpleHTTPServer Tutorial

我们已经在8000端口启动了Python SimpleHTTPServer。

现在,如果你进入浏览器,它将在网页的输出中显示所有的文件和文件夹列表。

没有名为SimpleHTTPServer的模块[已解决]

没有名为 SimpleHTTPServer 的模块的错误是Python 中的 ModuleNotFoundError。

如果你使用Python3并试图启动SimpleHTTPServer,你会得到类似于没有名为SimpleHTTPServer的模块的错误。

这是因为它与http.server模块合并了。你可以使用下面的命令来运行Python 3中的http服务器:

python3 -m http.server 9000

No module named SimpleHTTPServer

现在,在你启动服务器的目录下创建一个简单的index.html文件,并在index.html 文件中写下以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h3>Python SimpleHTTPServer</h3>
    <p style="margin-left: 30px; color: rebeccapurple">Python 3 Web Server</p> 
</body>
</html>

现在,到浏览器中输入这个URL:http://localhost:9000,看看输出:

Python SimpleHTTPServer Tutorial With Example | HTTP request Handler

Python3 HTTP服务器实例

Python 3http server模块定义了用于实现 HTTP 服务器或 Web 服务器的类。http.server 不建议用于生产。它只执行必要的安全检查。

我们可以编写服务器代码来创建一个Web服务器。

app.py 文件中写下以下代码:

# app.py

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

好的,现在运行该文件。所以到终端机上输入以下命令:

python3 app.py

如果你的目录中有一个index.html 文件,那么服务器就会用这个文件来响应。

你可以在这个链接上找到更多关于Python 3 http.server的信息。

Python 3 http服务器模块比较干净,提供了清晰的信息。然而,Python http服务器模块在退出键盘时并不显示所有的Python模块的细节;这是一个更干净的方法。

总结

Python的SimpleHTTPServer模块是一个方便而直接的工具,开发者可以将其用于多种用途,其中最主要的是它是一个快速提供目录中文件的方法。此外,它消除了与安装和实现可用的跨平台网络服务器有关的费力过程。

如果你使用Python 2,你可以使用下面的命令:

$ python -m SimpleHTTPServer 8000

如果你使用的是Python 3,你可以使用下面的命令:

$ python3 -m http.server 8000

服务器提供了一个简单的目录UI来访问任何文件。这是在本地通过HTTP直接提供文件的最简单方法。

Python为我们提供了SimpleHTTPServer模块(或Python 3中的http.server),可以快速有效地通过HTTP从本地目录中提供文件。这可以用于许多开发或其他内部任务,但并不意味着用于生产。

这是本地使用的一个很好的解决方案,因为像Apache、Monkey和Jigsaw这样的网络服务器在设置上更具挑战性,而且对于开发活动来说往往是过犹不及。

本教程到此结束。

推荐帖子

Python子进程

脚本

脚本

脚本

采集模块