【问题标题】:Python - Parsing multipart/form-data request on server sidePython - 在服务器端解析多部分/表单数据请求
【发布时间】:2014-09-03 13:10:23
【问题描述】:

我正在尝试使用 multipart/form-data 对 python GAE 后端执行 http 'POST'。 我的服务器端方法正在接收完整的正文,但我完全不知道如何在不手动检查正文内容并将文本拆分为值的情况下解析正文内容。

我的请求如下所示:

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

我四处搜索,但找不到一个很好的解释来说明如何做这件琐碎的事情。 感谢有人可以在这里帮助我。谢谢。

【问题讨论】:

    标签: python http httprequest


    【解决方案1】:

    由于某种原因,cgi.FieldStorage() 对我不起作用,但只有不推荐使用的方法:

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

    不知道为什么,但只要它可以正常工作。

    【讨论】:

    • 这不适合大文件。来自文档“这很容易使用,但如果您希望上传兆字节,则效果不佳 - 在这种情况下,请使用更灵活的 FieldStorage 类。”
    【解决方案2】:

    您想要.cgi python 库。

    具体是这样的:

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

    【讨论】:

      【解决方案3】:

      如果你想要上传的文件,你可以这样做

      for upload in self.get_uploads():

      如果你只想要一个文本字段:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-26
        • 2014-06-29
        • 2019-06-01
        • 2014-09-21
        • 1970-01-01
        • 2016-01-29
        • 2010-11-07
        • 2017-09-28
        相关资源
        最近更新 更多