def extractParam(self): """Turn muti part encoded form into params.""" params = [] try: environ = { 'CONTENT_TYPE': self.headers['content-type'], 'CONTENT_LENGTH': self.headers['content-length'], 'REQUEST_METHOD': 'POST', } except KeyError: trace('# Warning: missing header content-type or content-length' ' in file: %s not an http request ?\n' % self.file_path) return params form = FieldStorage(fp=StringIO(self.body), environ=environ, keep_blank_values=True) try: keys = form.keys() except TypeError: trace('# Using custom data for request: %s ' % self.file_path) params = Data(self.headers['content-type'], self.body) return params for item in form.list: key = item.name value = item.value filename = item.filename if filename is None: params.append([key, value]) else: # got a file upload filename = filename or '' params.append([key, 'Upload("%s")' % filename]) if filename: if os.path.exists(filename): trace('# Warning: uploaded file: %s already' ' exists, keep it.\n' % filename) else: trace('# Saving uploaded file: %s\n' % filename) f = open(filename, 'w') f.write(str(value)) f.close() return params