1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#!/usr/bin/python3
import os
import sys
import urllib.request
from http.server import HTTPServer, SimpleHTTPRequestHandler
class XkcdRequestHandler(SimpleHTTPRequestHandler):
XKCD_URL = "http://xkcd.com/"
XKCD_IMG_URL = "http://imgs.xkcd.com/"
def _mini_proxy(self, url):
fp = urllib.request.urlopen(url)
body = fp.read()
info = fp.info()
self.send_response(200, "ok")
for k, v in info.items():
self.send_header(k, v)
self.end_headers()
self.wfile.write(body)
def do_GET(self):
if self.path.startswith("/xkcd/"):
url = self.XKCD_URL + self.path[len("/xkcd/") :]
return self._mini_proxy(url)
elif self.path.startswith("/img/xkcd/"):
url = self.XKCD_IMG_URL + self.path[len("/img/xkcd/") :]
return self._mini_proxy(url)
else:
return super(XkcdRequestHandler, self).do_GET()
if __name__ == "__main__":
# we start in the snappy base directory, ensure we are in "www"
os.chdir(os.path.dirname(__file__) + "/../www")
if len(sys.argv) > 1:
port = int(sys.argv[1])
else:
port = 80
httpd = HTTPServer(("", port), XkcdRequestHandler)
httpd.serve_forever()
|