-
Notifications
You must be signed in to change notification settings - Fork 1
/
request.py
46 lines (39 loc) · 1.17 KB
/
request.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Micropython Http Server
# Erni Tron ernitron@gmail.com
# Copyright (c) 2016
def get_args(uri):
answer = {}
if uri == None or uri == b'' :
return answer
uri = bytes.decode(uri)
uri = urldecode(uri)
if '?' in uri:
params = uri.split('?')[1]
if '=' in uri:
answer = dict(item.split('=') for item in params.split('&'))
return answer
def urldecode(s):
table = {'%21':'!' ,'%23':'#' ,'%24':'$' ,'%26':'&' ,'%27':"'" ,'%28':'(' ,'%29':')' ,'%2F':'/' ,'%3A':':'}
#for k, v in table:
# s = s.replace(k, v)
return s
# Parses the client's request.
# Returns a dictionary containing pretty much everything
# the server needs to know about the uri.
def parse_request(req):
if b'\r\n' not in req :
return None
r = {}
line, rest = req.split(b'\n', 1)
method, uri, http = line.split(b' ')
Methods = b'GET HEAD POST PUT'
if method in Methods:
r['uri'] = uri
r['method'] = method
r['http'] = http
uri = uri.replace(b'/', b'')
r['args'] = get_args(uri)
if b'?' in uri: endpos = uri.find(b'?')
else: endpos = len(uri)
r['file'] = uri[:endpos]
return r