jol*_*roi 7 multipartform-data python-requests
我正在使用request-toolbelt解码通过 HTTP POST 请求提交的表单字段。我成功实例化了此处MultipartDecoder描述的类似内容。现在我想通过发送请求时指定的名称来访问表单字段。
我能够得到这样的字段的名称
from requests_toolbelt.multipart import decoder
multipart_string = b"--ce560532019a77d83195f9e9873e16a1\r\nContent-Disposition: form-data; name=\"author\"\r\n\r\nJohn Smith\r\n--ce560532019a77d83195f9e9873e16a1\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example2.txt\"\r\nContent-Type: text/plain\r\nExpires: 0\r\n\r\nHello World\r\n--ce560532019a77d83195f9e9873e16a1--\r\n"
content_type = "multipart/form-data; boundary=ce560532019a77d83195f9e9873e16a1"
decoder = decoder.MultipartDecoder(multipart_string, content_type)
field_name = decoder.parts[0].headers[b'Content-Disposition'].decode().split(';')[1].split('=')[1]
Run Code Online (Sandbox Code Playgroud)
但这似乎是完全错误的。访问表单字段名称的常用方法是什么?
小智 4
我在下面使用它来解码该方法的结果:
lst = []
for part in decoder.MultipartDecoder(postdata.encode('utf-8'), content_type_header).parts:
disposition = part.headers[b'Content-Disposition']
params = {}
for dispPart in str(disposition).split(';'):
kv = dispPart.split('=', 2)
params[str(kv[0]).strip()] = str(kv[1]).strip('\"\'\t \r\n') if len(kv)>1 else str(kv[0]).strip()
type = part.headers[b'Content-Type'] if b'Content-Type' in part.headers else None
lst.append({'content': part.content, "type": type, "params": params})
Run Code Online (Sandbox Code Playgroud)
我认为因为它是一个标准的 Mime 标头,所以有一些函数可以执行相同的操作,但代码也更少。
| 归档时间: |
|
| 查看次数: |
5149 次 |
| 最近记录: |