Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from http.server import BaseHTTPRequestHandler, HTTPServer
- from socketserver import ThreadingMixIn
- import sys
- import base64
- import http.client
- import json
- key = base64.b64encode(bytes('%s:%s' % ("demouser", "demopass"), 'utf-8')).decode('ascii')
- class AuthHandler(BaseHTTPRequestHandler):
- def do_AUTHHEAD(self):
- self.send_response(401)
- self.send_header(
- 'WWW-Authenticate', 'Basic realm="Demo Realm"')
- self.send_header('Content-type', 'application/json')
- self.end_headers()
- def do_GET(self):
- if self.headers.get('Authorization') == None:
- print('No auth header')
- self.do_AUTHHEAD()
- response = {
- 'success': False,
- 'error': 'No auth header received'
- }
- self.wfile.write(bytes(json.dumps(response), 'utf-8'))
- elif self.headers.get('Authorization') == 'Basic ' + str(key):
- print('Correct auth header')
- # proxy an imaage from the Pixabay
- # https://cdn.pixabay.com/photo/2021/04/25/08/07/tulips-6205808_1280.jpg
- conn = http.client.HTTPSConnection("cdn.pixabay.com")
- conn.request("GET", "/photo/2021/04/25/08/07/tulips-6205808_1280.jpg")
- resp = conn.getresponse()
- imgdata = resp.read()
- self.send_response(200)
- self.send_header("Content-type", "image/jpeg")
- self.end_headers()
- self.wfile.write(imgdata)
- else:
- print('Incorrect auth header')
- self.do_AUTHHEAD()
- response = {
- 'success': False,
- 'error': 'Invalid credentials'
- }
- self.wfile.write(bytes(json.dumps(response), 'utf-8'))
- class ForkingHTTPServer(ThreadingMixIn, HTTPServer):
- def finish_request(self, request, client_address):
- request.settimeout(30)
- # "super" can not be used because BaseServer is not created from object
- HTTPServer.finish_request(self, request, client_address)
- if __name__ == '__main__':
- try:
- httpd = ForkingHTTPServer(("localhost", 8090), AuthHandler)
- httpd.serve_forever()
- except KeyboardInterrupt:
- httpd.socket.close()
Add Comment
Please, Sign In to add comment