Python - 服务器端解析multipart/form-data请求

7 投票
3 回答
14802 浏览
提问于 2025-04-19 14:18

我正在尝试用http的'POST'请求发送multipart/form-data到一个Python的GAE后端。我的服务器端方法可以接收到完整的请求内容,但我完全不知道该怎么解析这些内容,而不是手动去拆分文本来获取值。

我的请求看起来是这样的:

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
...
--*****--

我搜索了一下,发现没有找到一个好的解释来处理这个简单的事情。如果有人能帮帮我,那就太感谢了。

3 个回答

-1

如果你想获取上传的文件,可以这样做:

for upload in self.get_uploads():

如果你只想要一个文本框的内容,可以这样写:

x = self.request.get('value1')

0

你需要使用 .cgi 这个Python库。

具体来说,你可以参考下面这样的代码:

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

不知道为什么,cgi.FieldStorage()对我来说不管用,只能用一个已经不推荐使用的方法:

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

虽然不知道原因,但只要能用就行。

撰写回答