def handle_request(self, request): parsed_request = {"method": "", "filename": "", "version": ""} response = Response() try: campos = request.split(" ") parsed_request["method"] = campos[0] parsed_request["filename"] = campos[1] parsed_request["version"] = campos[2] # print(request) print("Request: " + parsed_request["method"] + " " + parsed_request["filename"]) except: response.set_bad_request() return response.to_string() if parsed_request["method"] not in ["GET", "HEAD", "POST"]: response.set_bad_request() return response.to_string() if parsed_request["filename"] == '/': parsed_request["filename"] = '/index.html' if "private" in parsed_request["filename"].split("/"): response.set_forbidden() return response.to_string() try: file = open("htdocs" + parsed_request["filename"], "rb") response.body = file.read() except FileNotFoundError: response.set_not_found() return response.to_string() response.set_ok() if ".jpg" in parsed_request["filename"]: response.headers.append("Content-Type: image/jpeg") if ".png" in parsed_request["filename"]: response.headers.append("Content-Type: image/png") if ".html" in parsed_request["filename"]: response.headers.append("Content-Type: text/html") if parsed_request["method"] == "POST": data = request.split("\n") try: response.body = self.handle_post_data(data[len(data) - 1], response.body) except IndexError: response.set_bad_request() return response.to_string() response.headers.append("Content-Length: " + str(len(response.body))) if parsed_request["method"] == "HEAD": response.body = b'' if parsed_request["filename"] not in Cache.get_top_two(): time.sleep(1 / 10) print("[" + parsed_request["filename"] + "] Ficheiro nao esta em cache") # print(Cache.cache) # LIGAR ESTA LINHA E LINHA ABAIXO PARA FAZER DEBUG NA CACHE # print(Cache.get_top_two()) Cache.add_to_count(parsed_request["filename"]) return response.to_string()
def handleHttpRequest(request: Request, root: str) -> Response: if request.url == '': return Response() needBody = False if request.method == 'GET': needBody = True elif request.method == 'HEAD': needBody = False else: return closeConnection(Response(status=statuses[405])) isDir = False path = root + request.url if request.url[-1] == '/': isDir = True path += 'index.html' if path.find('../') != -1: return closeConnection(Response(status=statuses[403])) resp = Response() if needBody: try: with open(path, 'rb') as file: resp.body = file.read() resp.addHeader('Content-Length', str(len(resp.body))) except FileNotFoundError: if isDir: return closeConnection(Response(status=statuses[403])) else: return closeConnection(Response(status=statuses[404])) else: resp.addHeader('Content-Length', str(os.lstat(path).st_size)) resp.addHeader('Content-Type', defineContentType(path)) return closeConnection(resp)
def handle(self): print "Connection recieved from {}".format(self.client_address[0]) # just send back the same data, but upper-cased request = Request(self.request) response = Response(self.request) response.body = """ <!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <h1>Page Body</h1> </body> </html> """ response.headers["Content-Type"] = "text/html" response.send()
import socket from response import Response SERVER = ('127.0.0.1', 3000) server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind(SERVER) server_socket.listen() client_socket, CLIENT = server_socket.accept() print(f'{CLIENT}가 연결됨') res = Response() res.body = "Hello, world!" res.header.headers['Connection'] = 'Keep-Alive' res.header.headers['Keep-Alive'] = 'timeout=5, max=100' msg = res.str() if ('\r\n' not in msg): msg = msg.replace('\n', '\r\n') print(f'"""{msg}"""') while True: data = client_socket.recv(1024) if not data: break print(f'"""{data.decode()}"""')