+import time
+
statusinfo = {
- 400: ("Bad Request", "Your issued HTTP request is invalid."),
- 403: ("Forbidden", "You are not authorized to view the requested resource."),
+ 400: ("Bad Request", "Invalid HTTP request."),
+ 401: ("Unauthorized", "Authentication must be provided for the requested resource."),
+ 403: ("Forbidden", "You are not authorized to request the requested resource."),
404: ("Not Found", "The requested resource was not found."),
- 500: ("Server Error", "An internal error occurred.")
+ 405: ("Method Not Allowed", "The request method is not recognized or permitted by the requested resource."),
+ 500: ("Server Error", "An internal error occurred."),
+ 501: ("Not Implemented", "The requested functionality has not been implemented."),
+ 503: ("Service Unavailable", "Service is being denied at this time."),
}
def httpdate(ts):
tz = (((tz / 100) * 60) + (tz % 100)) * 60
return time.mktime(time.strptime(dstr, "%a, %d %b %Y %H:%M:%S")) - tz - time.altzone
+def pmimehead(hstr):
+ def pws(p):
+ while p < len(hstr) and hstr[p].isspace():
+ p += 1
+ return p
+ def token(p, sep):
+ buf = ""
+ p = pws(p)
+ if p >= len(hstr):
+ return "", p
+ if hstr[p] == '"':
+ p += 1
+ while p < len(hstr):
+ if hstr[p] == '\\':
+ p += 1
+ if p < len(hstr):
+ buf += hstr[p]
+ p += 1
+ else:
+ break
+ elif hstr[p] == '"':
+ p += 1
+ break
+ else:
+ buf += hstr[p]
+ p += 1
+ return buf, pws(p)
+ else:
+ while p < len(hstr):
+ if hstr[p] in sep:
+ break
+ buf += hstr[p]
+ p += 1
+ return buf.strip(), pws(p)
+ p = 0
+ val, p = token(p, ";")
+ pars = {}
+ while p < len(hstr):
+ if hstr[p] != ';':
+ break
+ p += 1
+ k, p = token(p, "=")
+ if k == "" or hstr[p:p + 1] != '=':
+ break
+ p += 1
+ v, p = token(p, ';')
+ pars[k.lower()] = v
+ return val, pars
+
def htmlq(html):
ret = ""
for c in html:
local = local[:q]
return proto, host, local, query
-def consurl(proto, host, local, query = ""):
+def consurl(proto, host, local, query=""):
if len(local) < 1 and local[0] != '/':
raise urlerror("Local part of URL must begin with a slash")
ret = "%s://%s%s" % (proto, host, local)
raise Exception("Malformed local part when reconstructing URL")
return "%s://%s%s" % (proto, host, req.uri)
-def parstring(pars = {}, **augment):
+def parstring(pars={}, **augment):
buf = ""
for key in pars:
if key in augment:
if buf != "": buf += "&"
buf += urlq(key) + "=" + urlq(str(augment[key]))
return buf
+
+def parurl(url, pars={}, **augment):
+ qs = parstring(pars, **augment)
+ if qs != "":
+ return url + "?" + qs
+ else:
+ return url