initialization
This commit is contained in:
commit
095fccc37c
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.idea
|
85
myhttpserver.py
Normal file
85
myhttpserver.py
Normal file
|
@ -0,0 +1,85 @@
|
|||
from http.server import BaseHTTPRequestHandler, HTTPServer, SimpleHTTPRequestHandler
|
||||
import os
|
||||
import urllib.parse
|
||||
import html
|
||||
from http import HTTPStatus
|
||||
import io
|
||||
import sys
|
||||
|
||||
|
||||
def is_picture(filename):
|
||||
file_ext=os.path.splitext(filename)[1]
|
||||
if file_ext in ['.bmp','.png','.jpg','.jpeg','.gif']:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
class MyHTTPRequestHandler(SimpleHTTPRequestHandler):
|
||||
def list_directory(self, path):
|
||||
"""Helper to produce a directory listing (absent index.html).
|
||||
|
||||
Return value is either a file object, or None (indicating an
|
||||
error). In either case, the headers are sent, making the
|
||||
interface the same as for send_head().
|
||||
|
||||
"""
|
||||
try:
|
||||
list = os.listdir(path)
|
||||
except OSError:
|
||||
self.send_error(
|
||||
HTTPStatus.NOT_FOUND,
|
||||
"No permission to list directory")
|
||||
return None
|
||||
list.sort(key=lambda a: a.lower())
|
||||
r = []
|
||||
try:
|
||||
displaypath = urllib.parse.unquote(self.path,
|
||||
errors='surrogatepass')
|
||||
except UnicodeDecodeError:
|
||||
displaypath = urllib.parse.unquote(path)
|
||||
displaypath = html.escape(displaypath, quote=False)
|
||||
enc = sys.getfilesystemencoding()
|
||||
title = 'Directory listing for %s' % displaypath
|
||||
r.append('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" '
|
||||
'"http://www.w3.org/TR/html4/strict.dtd">')
|
||||
r.append('<html>\n<head>')
|
||||
r.append('<meta http-equiv="Content-Type" '
|
||||
'content="text/html; charset=%s">' % enc)
|
||||
r.append('<title>%s</title>\n</head>' % title)
|
||||
r.append('<body>\n<h1>%s</h1>' % title)
|
||||
r.append('<hr>\n<ul>')
|
||||
for name in list:
|
||||
fullname = os.path.join(path, name)
|
||||
displayname = linkname = name
|
||||
# Append / for directories or @ for symbolic links
|
||||
if os.path.isdir(fullname):
|
||||
displayname = name + "/"
|
||||
linkname = name + "/"
|
||||
if os.path.islink(fullname):
|
||||
displayname = name + "@"
|
||||
# Note: a link to a directory displays with @ and links with /
|
||||
if is_picture(displayname):
|
||||
r.append('<li><img src="%s" style="width:100px"/><a href="%s">%s</a></li>'
|
||||
% (urllib.parse.quote(linkname,
|
||||
errors='surrogatepass'), urllib.parse.quote(linkname,
|
||||
errors='surrogatepass'),
|
||||
html.escape(displayname, quote=False)))
|
||||
else:
|
||||
r.append('<li><a href="%s">%s</a></li>'
|
||||
% (urllib.parse.quote(linkname,
|
||||
errors='surrogatepass'),
|
||||
html.escape(displayname, quote=False)))
|
||||
r.append('</ul>\n<hr>\n</body>\n</html>\n')
|
||||
encoded = '\n'.join(r).encode(enc, 'surrogateescape')
|
||||
f = io.BytesIO()
|
||||
f.write(encoded)
|
||||
f.seek(0)
|
||||
self.send_response(HTTPStatus.OK)
|
||||
self.send_header("Content-type", "text/html; charset=%s" % enc)
|
||||
self.send_header("Content-Length", str(len(encoded)))
|
||||
self.end_headers()
|
||||
return f
|
||||
|
||||
|
||||
with HTTPServer(('', 8000), MyHTTPRequestHandler) as server:
|
||||
server.serve_forever()
|
Loading…
Reference in New Issue
Block a user