- 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/
我有一个基于 BaseHTTPServer 的简单服务器的以下代码。 class myHandler(BaseHTTPRequestHandler): #Handler for the GET
我的代码很简单。使用 BaseHTTPServer 和 ThreadInMix 我想运行每个同时发出的请求的 python 脚本 (Script1.py)。 我的代码- 从子进程导入 PIPE,P
您好,我有这个代码用于我的变量发布,我希望它始终监听和接收发布请求,工作正常,但在接收到第一个变量后,脚本运行但不再获得发布变量。 只能正常运行一次,然后必须重新启动 python 脚本。 impor
我正在使用 BaseHttpServer 类的方法“do_GET”。 我想做的是连续调用这个方法可以访问同一个共享变量 如果我发送第一个命令 0 然后 1,我将无法访问同一个变量 from BaseH
我正在尝试为 javascript 编写一个简单的本地代理:因为我需要从网页中的 javascript 加载一些东西,所以我用 python 编写了这个简单的守护进程: import string,c
这是我的: http.py: class HTTPServer(): def __init__(self, port): self.port = port se
我正在尝试评估各种语言以构建小型高吞吐量应用程序服务器。它需要做一些小事情,比如获取请求、从运行缓存应用程序(memcached、redis)的单独服务器读取数据,以及发回 5 - 10 行 XML
为了允许帮助台重新启动 Oracle 实例,我们正在尝试实现一个小型 python Web 服务器,该服务器将启动启动 Oracle 实例的 shell 脚本。 代码已完成,它启动了实例,但有一个问题
我使用 BaseHTTPServer 编写了一个快速的网络服务器,它工作得很好,所以现在我正在尝试实现日志记录,我注意到,嘿,似乎 BaseHTTPServer 已经有一些日志信息输出到标准输出,是吗
我正在尝试使用 BaseHttpServer 和 ThreadingMixIn 创建一个多线程网络服务器(如各种示例所示)。伪代码类似于: class Handler(BaseHTTPRequestH
引用:http://docs.python.org/2/library/basehttpserver.html 我有以下代码片段,它使用 Python BaseHTTPServer 来运行基本的 HT
根据来源,BaseServer.shutdown() 必须从与运行服务器的线程不同的线程调用。 但是,我试图通过在 Web 请求中向服务器提供特定值来关闭服务器。 请求处理程序显然在这个线程中运行,所
有没有办法让 BaseHTTPServer.HTTPServer 像 SocketServer.ThreadingTCPServer 一样是多线程的? 最佳答案 您可以简单地使用使用这两个类的线程混合
我有以下 python 代码,其中我通过扩展 HTTPBaseServer 编写了一个简单的 HTTP 服务器: class ApiError(Exception): def __init__
我正在构建一个基于 python 的网络服务器( 是的,python 对于网络服务器来说是一个糟糕的选择,但这是我唯一的选择还有另一个很好的选择可以满足我的目的,例如 PHP,但我仅限于 python
我正在编写一个非常基本的网络服务器(好吧,正在尝试),虽然它现在可以很好地提供 HTML,但我的 CSS 文件似乎根本无法被识别。我的机器上也运行着 Apache2,当我将文件复制到 docroot
我有下一个 python 代码: from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import os PORT_NUMBER
我正在尝试使用 Python2.7 中的 BaseHttpServer 来制作一个简单的 HTTP SERVER,问题是当我想通过 在浏览器上设置多个 cookie 时 self.send_
我有调用外部 HTTP 服务的 Python 代码。我想通过设置模仿这些外部服务的模拟 HTTP 服务器来测试此代码。为此,我在一个单独的线程中启动一个 BaseHTTPServer,然后从主线程调用
因此,我尝试按照有关如何使用 web.py 的在线教程进行操作,并且安装了它,但不幸的是,使用这段代码会产生严重的错误。我的代码... import web urls = ( '/(.*)',
我是一名优秀的程序员,十分优秀!