Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
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()}"""')