1、使用Python3 内部提供的http.server
python -m http.server(默认端口8000)。
默认情况下它会以当前运行目录为根目录,建立HTTP服务。如果当前目录存在index.html或者index.htm文件,那么默认会读取该文件作为首页访问;如果不存在那么就会建立一个文件服务器,支持浏览和下载。
2、基于http.server改造,具备文件上传功能
新建http_server.py文件,代码如下,执行python3 -m http_server.py(端口默认是8000)。需要说明的是,在Windows环境下,只能使用localhost测试,这个跟你的hosts配置文件有关。
在一些有限制的服务器(如堡垒机限制的服务器)里面,可以采用这种方式进行文件的上传和下载是非常方便的。
# !/usr/bin/env python3
import datetime
import email
import html
import http.server
import io
import mimetypes
import os
import posixpath
import re
import shutil
import sys
import urllib.error
import urllib.parse
import urllib.request
from http import HTTPStatus
__version__ = "0.1"
__all__ = ["SimpleHTTPRequestHandler"]
class SimpleHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
server_version = "SimpleHTTP/" + __version__
extensions_map = _encodings_map_default = {
'.gz': 'application/gzip',
'.Z': 'application/octet-stream',
'.bz2': 'application/x-bzip2',
'.xz': 'application/x-xz',
}
def __init__(self, *args, directory=None, **kwargs):
if directory is None:
directory = os.getcwd()
self.directory = os.fspath(directory)
super().__init__(*args, **kwargs)
def do_GET(self):
f = self.send_head()
if f:
try:
self.copyfile(f, self.wfile)
finally:
f.close()
def do_HEAD(self):
f = self.send_head()
if f:
f.close()
def send_head(self):
path = self.translate_path(self.path)
f = None
if os.path.isdir(path):
parts = urllib.parse.urlsplit(self.path)
if not parts.path.endswith('/'):
# redirect browser - doing basically what apache does
self.send_response(HTTPStatus.MOVED_PERMANENTLY)
new_parts = (parts[0], parts[1], parts[2] + '/',
parts[3], parts[4])
new_url = urllib.parse.urlunsplit(new_parts)
self.send_header("Location", new_url)
self.end_headers()
return None
for index in "index.html", "index.htm":
index = os.path.join(path, i