#!/usr/bin/env python3

import argparse
import logging
import socket

HOST = 'www.google.com'
PORT = 'http'
PATH = '/'

parser = argparse.ArgumentParser(description='HTTP Downloader')
parser.add_argument('--debug', action='store_true')
parser.add_argument('--host', default=HOST)
parser.add_argument('--port', default=PORT)
parser.add_argument('path', nargs='?', default=PATH)
args = parser.parse_args()
if args.debug:
    logging.basicConfig(level=logging.DEBUG)
else:
    logging.basicConfig(level=logging.INFO)
try:
    port = int(args.port)
except:
    port = socket.getservbyname(args.port)


sock = socket.create_connection((args.host, port))

request = b'\r\n'.join([ bytes(line, 'utf-8') for line in [
    f'GET {args.path} HTTP/1.1',
    f'Host: {args.host}',
    'Connection: close',
    '',
    ''
    ]])

logging.info(f'REQUEST {request}')
for line in request.split(b'\r\n'):
    logging.info(f'  {line}')
sock.sendall(request)
response = b''
while True:
    part = sock.recv(8192)
    if part == b'':
        break
    response += part
logging.info(f'RESPONSE {response}')
for line in response.split(b'\r\n'):
    logging.info(f'  {line}')
sock.close()
