diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7e99e36 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.pyc \ No newline at end of file diff --git a/part1/webserver1.py b/part1/webserver1.py index 987e6cf..cf0098b 100644 --- a/part1/webserver1.py +++ b/part1/webserver1.py @@ -6,16 +6,16 @@ listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) listen_socket.bind((HOST, PORT)) listen_socket.listen(1) -print 'Serving HTTP on port %s ...' % PORT +print('Serving HTTP on port %s ...' % PORT) while True: client_connection, client_address = listen_socket.accept() request = client_connection.recv(1024) - print request + print(request) http_response = """\ HTTP/1.1 200 OK Hello, World! """ - client_connection.sendall(http_response) + client_connection.sendall(http_response.encode('utf-8')) client_connection.close() diff --git a/part2/webserver2.py b/part2/webserver2.py index dfb1723..95304a1 100644 --- a/part2/webserver2.py +++ b/part2/webserver2.py @@ -1,9 +1,10 @@ -# Tested with Python 2.7.9, Linux & Mac OS X +try: + from StringIO import StringIO # Python 2 +except: + from io import StringIO # Python 3 import socket -import StringIO import sys - class WSGIServer(object): address_family = socket.AF_INET @@ -62,7 +63,7 @@ def handle_one_request(self): self.finish_response(result) def parse_request(self, text): - request_line = text.splitlines()[0] + request_line = text.splitlines()[0].decode('utf-8') request_line = request_line.rstrip('\r\n') # Break down the request line into components (self.request_method, # GET @@ -79,7 +80,7 @@ def get_environ(self): # Required WSGI variables env['wsgi.version'] = (1, 0) env['wsgi.url_scheme'] = 'http' - env['wsgi.input'] = StringIO.StringIO(self.request_data) + env['wsgi.input'] = StringIO(self.request_data.decode('utf-8')) env['wsgi.errors'] = sys.stderr env['wsgi.multithread'] = False env['wsgi.multiprocess'] = False @@ -111,13 +112,14 @@ def finish_response(self, result): response += '{0}: {1}\r\n'.format(*header) response += '\r\n' for data in result: - response += data + response += data.decode('utf-8') # Print formatted response data a la 'curl -v' print(''.join( '> {line}\n'.format(line=line) for line in response.splitlines() )) - self.client_connection.sendall(response) + #self.client_connection.sendall(bytes(response, 'UTF-8')) + self.client_connection.sendall(response.encode('utf-8')) finally: self.client_connection.close() diff --git a/part2/wsgiapp.py b/part2/wsgiapp.py index d4f948e..4650206 100644 --- a/part2/wsgiapp.py +++ b/part2/wsgiapp.py @@ -7,4 +7,4 @@ def app(environ, start_response): status = '200 OK' response_headers = [('Content-Type', 'text/plain')] start_response(status, response_headers) - return ['Hello world from a simple WSGI application!\n'] + return ['Hello world from a simple WSGI application!\n'.encode('utf-8')]