Python2搭建简单的HTTP服务器
在网络开发中,经常需要搭建HTTP服务器来提供网页、接口等服务。Python内置了一个简单的HTTP服务器模块,可以很方便地搭建一个简单的HTTP服务器。本文将介绍如何使用Python2中的SimpleHTTPServer
和BaseHTTPServer
模块搭建一个简单的HTTP服务器。
1. SimpleHTTPServer
模块
首先,我们来看一下SimpleHTTPServer
模块。这个模块提供了一个简单的HTTP服务器,可以用于快速搭建一个静态文件服务器。
1.1 搭建HTTP服务器
下面是一个简单的示例,演示如何搭建一个HTTP服务器,并监听在8888
端口上:
# 导入SimpleHTTPServer模块
import SimpleHTTPServer
import SocketServer
# 设置监听端口为8888
PORT = 8888
# 创建一个简单的HTTP服务器
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
# 启动服务器
print "Server started at port", PORT
httpd.serve_forever()
保存为server.py
,在命令行中执行python server.py
即可启动一个HTTP服务器,然后在浏览器中访问http://localhost:8888
即可看到服务器的默认页面。
1.2 访问文件
SimpleHTTPServer
模块默认会将当前目录作为根目录,我们可以通过http://localhost:8888/filename
来访问当前目录下的文件。
1.3 自定义根目录
如果想要使用自定义的根目录,可以使用BaseHTTPServer
模块中的BaseHTTPRequestHandler
类来重写do_GET
方法,如下所示:
import SimpleHTTPServer
import SocketServer
PORT = 8888
class CustomHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write("Hello, world!")
Handler = CustomHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "Server started at port", PORT
httpd.serve_forever()
这样,访问http://localhost:8888
将输出Hello, world!
。
2. BaseHTTPServer
模块
BaseHTTPServer
模块提供了更加底层的HTTP服务器实现,可以用于定制更复杂的HTTP服务器。
2.1 搭建HTTP服务器
下面是一个使用BaseHTTPServer
模块搭建HTTP服务器的示例:
import BaseHTTPServer
PORT = 8888
class CustomHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write("Hello, world!")
try:
httpd = BaseHTTPServer.HTTPServer(("", PORT), CustomHandler)
print "Server started at port", PORT
httpd.serve_forever()
except KeyboardInterrupt:
print "Server stopped"
保存为server.py
,在命令行中执行python server.py
即可启动一个HTTP服务器,访问http://localhost:8888
将输出Hello, world!
。
2.2 处理POST请求
BaseHTTPServer
模块中的BaseHTTPRequestHandler
类也提供了处理POST请求的方法do_POST
,可以在其中处理POST请求的逻辑。
下面是一个处理POST请求的示例:
import BaseHTTPServer
import cgi
PORT = 8888
class CustomHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_POST(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
})
self.wfile.write("Hello, " + form['name'].value + "!")
try:
httpd = BaseHTTPServer.HTTPServer(("", PORT), CustomHandler)
print "Server started at port", PORT
httpd.serve_forever()
except KeyboardInterrupt:
print "Server stopped"
在这个示例中,当接收到POST请求时,服务器将返回Hello, {name}!
,其中{name}
为POST请求中的name
字段的值。
结语
通过上面的介绍,你应该了解了如何使用Python2中的SimpleHTTPServer
和BaseHTTPServer
模块搭建一个简单的HTTP服务器。这对于快速搭建一个本地开发服务器或调试接口非常有用。