2014-09-03 203 views
5

我试图用multipart/form-data做一个http'POST'到python GAE后端。 我的服务器端方法正在接收完整的主体,但我绝对不知道如何解析主体内容,而无需手动进行翻译并将值分割为文本。Python - 解析服务器端的multipart/form-data请求

我的要求是这样的:

POST /android/v4/MyPostMethod HTTP/1.1 
Accept: */* 
Accept-Charset: * 
Content-Length: 186808 
Content-Type: multipart/form-data; boundary=*****; charset="utf-8" 
Content_Length: 186808 
Content_Type: multipart/form-data; boundary=***** 
Host: myhost.appspot.com 
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.2; GT-I9300 Build/XXXXX) 
Via: HTTP/1.1 MSP-YV 

--***** 
Content-Disposition: form-data; name="value1" 
Content-Type: text/plain; charset=UTF-8 

f0ef73c5-54dd-40cf-9ee7-5c4cb764eb28 
--***** 
Content-Disposition: form-data; name="value2" 
Content-Type: text/plain; charset=UTF-8 

10d71e73-4d4d-4607-b271-f7efcfd0c59d 
--***** 
Content-Disposition: form-data; name="value3" 
Content-Type: text/plain; charset=UTF-8 

10d71e73-4d4d-4607-b271-f7efdfdfdfdf 
--***** 
Content-Disposition: form-data; name="logText"; filename="log.txt" 
Content-Type: text/plain 
Content-Transfer-Encoding: binary 

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
... 
--*****-- 

我周围中搜索,但没有找到如何做到这一点小事一个很好的解释。 欣赏有人能帮助我。谢谢。

回答

4

出于某种原因cgi.FieldStorage()wasnt为我工作,但只有方法已过时:

pdict = {'boundary':'*****'} 
cgi.parse_multipart(self.request.body_file, pdict) 

不知道为什么,但只要其工作很好。

+0

这对于大文件并不理想。从文档“这很容易使用,但如果您希望上传兆字节,这并不是很好,在这种情况下,请使用FieldStorage类,而不是更灵活。” – mbarkhau 2015-12-16 17:40:12

0

你想要.cgi python库。

具体是这样的:

import cgi 
form = cgi.FieldStorage() 
value1 = form.getfirst("value1", "") 
value2 = form.getfirst("value2", "") 
value3 = form.getfirst("value3", "") 
logtext = form.getfirst("logText", "")