From 5d60faa6eca1f83e9432a7ce0a6cfbbdbcac5f7f Mon Sep 17 00:00:00 2001 From: Dave Hylands Date: Mon, 14 May 2018 13:54:59 -0700 Subject: [PATCH 1/2] Allow PUT command to work with microWebSrv - modified code to allow http headers to be case insensitive (as per spec) --- .../micropython/esp32/modules/microWebSrv.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/MicroPython_BUILD/components/micropython/esp32/modules/microWebSrv.py b/MicroPython_BUILD/components/micropython/esp32/modules/microWebSrv.py index ddeea334..4d3f2fd3 100755 --- a/MicroPython_BUILD/components/micropython/esp32/modules/microWebSrv.py +++ b/MicroPython_BUILD/components/micropython/esp32/modules/microWebSrv.py @@ -27,11 +27,11 @@ class MicroWebSrvRoute : def __init__(self, route, method, func, routeArgNames, routeRegex) : - self.route = route - self.method = method - self.func = func + self.route = route + self.method = method + self.func = func self.routeArgNames = routeArgNames - self.routeRegex = routeRegex + self.routeRegex = routeRegex class MicroWebSrv : @@ -305,7 +305,7 @@ def GetMimeTypeFromFilename(self, filename) : return None # ---------------------------------------------------------------------------- - + def GetRouteHandler(self, resUrl, method) : if self._routeHandlers : #resUrl = resUrl.upper() @@ -366,7 +366,7 @@ def __init__(self, microWebSrv, socket, addr) : self._headers = { } self._contentType = None self._contentLength = 0 - + self._processRequest() # ------------------------------------------------------------------------ @@ -444,18 +444,18 @@ def _parseFirstLine(self, response) : except : pass return False - + # ------------------------------------------------------------------------ def _parseHeader(self, response) : while True : elements = self._socket.readline().decode().strip().split(':', 1) if len(elements) == 2 : - self._headers[elements[0].strip()] = elements[1].strip() + self._headers[elements[0].strip().lower()] = elements[1].strip() elif len(elements) == 1 and len(elements[0]) == 0 : - if self._method == 'POST' : - self._contentType = self._headers.get("Content-Type", None) - self._contentLength = int(self._headers.get("Content-Length", 0)) + if self._method == 'POST' or self._method == 'PUT' : + self._contentType = self._headers.get("content-type", None) + self._contentLength = int(self._headers.get("content-length", 0)) return True else : return False @@ -463,8 +463,8 @@ def _parseHeader(self, response) : # ------------------------------------------------------------------------ def _getConnUpgrade(self) : - if 'upgrade' in self._headers.get('Connection', '').lower() : - return self._headers.get('Upgrade', '').lower() + if 'upgrade' in self._headers.get('connection', '').lower() : + return self._headers.get('upgrade', '').lower() return None # ------------------------------------------------------------------------ @@ -563,7 +563,7 @@ def ReadRequestContentAsJSON(self) : return loads(self.ReadRequestContent()) except : return None - + # ============================================================================ # ===( Class Response )====================================================== # ============================================================================ From 078e51ef8899b2c60a124a77d9328cdb6e2fa0fe Mon Sep 17 00:00:00 2001 From: Dave Hylands Date: Thu, 17 May 2018 20:56:37 -0700 Subject: [PATCH 2/2] Fix for microWebSocket This corresponds to /~https://github.com/jczic/MicroWebSrv/pull/27 --- .../components/micropython/esp32/modules/microWebSocket.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MicroPython_BUILD/components/micropython/esp32/modules/microWebSocket.py b/MicroPython_BUILD/components/micropython/esp32/modules/microWebSocket.py index f37a532a..3fe3d304 100755 --- a/MicroPython_BUILD/components/micropython/esp32/modules/microWebSocket.py +++ b/MicroPython_BUILD/components/micropython/esp32/modules/microWebSocket.py @@ -98,7 +98,7 @@ def __init__(self, socket, httpClient, httpResponse, maxRecvLen, threaded, accep def _handshake(self, httpResponse) : try : - key = self._httpCli.GetRequestHeaders().get('Sec-WebSocket-Key', None) + key = self._httpCli.GetRequestHeaders().get('sec-websocket-key', None) if key : key += self._handshakeSign r = sha1(key.encode()).digest()