update client

This commit is contained in:
2021-03-17 16:10:19 +01:00
parent 54284cf22a
commit 8d4cc69205
2 changed files with 35 additions and 2 deletions

BIN
Assignment_Python_2021.pdf Normal file

Binary file not shown.

View File

@@ -17,6 +17,8 @@ def receive_bytes_chunk(client: socket.socket):
received_size = len(received)
logging.debug("Received size: %s", received_size)
logging.debug("Received: %r", received)
def receive_bytes(client: socket.socket):
buffering = True
buffer = b''
@@ -93,6 +95,37 @@ def validate_status_line(status_line: str):
return True
def get_chunk(buffer: bytes):
lf_pos = buffer.find(b"\n\n")
crlf_pos = buffer.find(b"\r\n\r\n")
if lf_pos != -1 and lf_pos < crlf_pos:
split_start = lf_pos
split_end = lf_pos + 2
else:
split_start = crlf_pos
split_end = crlf_pos + 4
return buffer[:split_start], buffer[split_end:]
def response_parser(client: socket.socket):
client.settimeout(3.0)
try:
buffer = client.recv(BUFSIZE)
except TimeoutError as err:
# TODO handler error appropriately
logging.debug("[ERR] Socket timeout: %r", exc_info=err)
return
(header_chunk, buffer) = get_chunk(buffer)
(status_line, headers) = parse_header(header_chunk)
if not validate_status_line(status_line):
raise Exception("Invalid status-line")
logging.debug("valid status-line: %r", status_line)
def http_parser(client: socket.socket):
headers = {}
start_line = ""
@@ -109,7 +142,6 @@ def http_parser(client: socket.socket):
logging.debug("chunk: %r", chunk)
def main():
parser = argparse.ArgumentParser(description='HTTP Client')
parser.add_argument("--verbose", "-v", action='count', default=0, help="Increase verbosity level of logging")
@@ -125,9 +157,10 @@ def main():
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((arguments.URI, arguments.port))
message = "GET / HTTP/1.1\r\nHost: www.google.com:80\r\n\r\n".encode(FORMAT)
message = "GET /Protocols/HTTP/Performance/microscape/ HTTP/1.1\r\nHost: www.w3.org:80\r\n\r\n".encode(FORMAT)
client.sendall(message)
response_parser(client)
http_parser(client)
# tmp = b''
# keep = False