- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在寻找一个模块,该模块可为我提供用于本地访问的基本 HTTP 服务器功能。 Python 似乎有两种方法可以在标准库中实现简单的 http 服务器:wsgiref.simple_server和 BaseHttpServer .
有什么区别?有充分的理由偏爱其中之一吗?
最佳答案
简答:wsgiref.simple_server
是一个基于 BaseHTTPServer
的 WSGI 适配器。
更长的答案:
BaseHTTPServer
(和它构建的 SocketServer
)是实现大部分实际 HTTP 服务器的模块。它可以接受请求并返回响应,但它必须知道如何处理这些请求。当您直接使用 BaseHTTPServer
时,您可以通过子类化 BaseHTTPRequestHandler
来提供处理程序,例如:
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-Type', 'text/plain')
self.end_headers()
self.wfile.write('Hello world!\n')
HTTPServer(('', 8000), MyHandler).serve_forever()
wsgiref.simple_server
将此 BaseHTTPServer
接口(interface)适配到 WSGI规范,这是独立于服务器的 Python Web 应用程序的标准。在 WSGI 中,您以函数的形式提供处理程序,例如:
from wsgiref.simple_server import make_server
def my_app(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
yield 'Hello world!\n'
make_server('', 8000, my_app).serve_forever()
make_server
函数返回 WSGIServer
的一个实例,它从 BaseHTTPServer.HTTPServer
继承了大部分实际协议(protocol)/网络逻辑和 SocketServer.TCPServer
(尽管它确实最终重新实现了一些简单的 HTTP 规则)。主要区别在于您将应用程序代码与该逻辑集成的方式。
这实际上取决于您要解决的问题,但是针对 wsgiref
进行编码可能是一个更好的主意,因为它可以让您轻松迁移到不同的生产级 HTTP服务器,例如 uWSGI或 Gunicorn , future 。
关于python - BaseHttpServer 和 wsgiref.simple_server 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25612290/
我有一些这样的功能: URL = 'http://localhost:8080' def func(): response = urlopen(URL) return process(
我要构建一个简单的 Web 应用程序,我才刚刚开始摆弄 mod_wsgi。在各种教程中,第一个 hello world 应用程序如下所示: def application(environ,start_
我似乎无法让 wsgiref 模块在 Python 3.0 下工作。不过对我来说,2.5 以下效果很好。即使当我尝试 example in the docs , 它失败。它失败得很厉害,即使我在上面有
我正在尝试从简单的表单中捕获 POST 数据。 这是我第一次使用 WSGIREF,我似乎找不到正确的方法。 This is the form: 这个函数显然缺少正确的信息来捕获帖子: def a
在 OSX (darwin) 上使用 Python 2.7.2,我想隐藏或自定义 wsgiref.simple_server.make_server() 发送的“服务器”响应 header 。 我尝试
我正在使用 wsgiref.simple_server 来研究网络服务器的世界。 我想控制生成的日志,但在 Python's documentation 中找不到任何相关信息. 我的代码是这样的: f
我正在按照这篇文章做一些 django TDD 示例 http://www.tdd-django-tutorial.com/tutorial/1/ . 但是当我尝试运行我的测试时,我总是遇到这个问题,
使用 python 和 wsgiref.handlers,我可以使用 self.handler.request.get(var_name) 从表单中获取单个变量,但是如何遍历所有表单变量,无论是来自
我正在寻找一个模块,该模块可为我提供用于本地访问的基本 HTTP 服务器功能。 Python 似乎有两种方法可以在标准库中实现简单的 http 服务器:wsgiref.simple_server和 B
我在安装 wsgiref 时遇到问题: $ python --version Python 3.6.0 :: Anaconda 4.3.1 (x86_64) $ pip --version pip 9
我刚刚学习如何使用 python 和 GAE,我注意到主 URL 处理程序以两种不同的方式显示。调用 run_wsgi_app 与 wsgiref.handlers.CGIHandler 有什么区别?
Bottle 在 Python 内置的 wsgiref 服务器实现中做了什么 WSGIref简单的服务器不?例如,当我查看 Bottle 时,它遵循 WSGI 标准,并且文档指出: 1.5.1 S
我有一个恼人的问题。我有这个简单的服务器代码(比方说): #!/usr/bin/env python3 import wsgiref.simple_server def my_func(env, st
这是一个简单的 python wsgi 服务器,打印出 Hello guys!!!在 0.0.0.0:8080 . from wsgiref.simple_server import make_ser
我正在尝试实现我自己的 wsgiref 版本以用于学习目的,我最终在这里: from wsgiref.simple_server import make_server class DemoApp():
这个问题在这里已经有了答案: Why does pip freeze report some packages in a fresh virtualenv created with --no-sit
我无法在 python 3 中安装 wsgiref。我收到了这些错误。 我正在使用 python 3,但我无法安装 wsgiref 我试过 pip install wsgiref 和 pip inst
我正在阅读 Heroku 教程“Python 入门”。我正处于要使用 virtualenv 在本地构建我的环境的步骤,以便我可以在本地运行测试应用程序。 requirements.txt 包括 wsg
我使用的是不直接支持 wsgi 应用程序的共享 cpanel 托管计划。所以我必须使用 wsgiref CGIHandler 解决方法,如下所述:http://flask.pocoo.org/docs
我正在尝试在 Python3 中创建一个 HTTP 服务器。一开始,我只想要一个提供单个 JPG 文件的服务器。这是我的代码: from wsgiref.simple_server import ma
我是一名优秀的程序员,十分优秀!