python - 解析多部分/表单数据,从请求后接收

标签 python web-services client python-requests

我正在编写 Web 服务客户端,使用请求库。我正在获取包含文件和文本 json 的 multipart/form-data 中的数据。我不知道如何解析它。是否有合适的库来解析 python 中的多部分/表单数据格式,或者我应该自己编写解析器?

我的代码:

data = {
  "prototypeModel" :('prototypeModel', open(prototypeModel, 'rb'), 'application/octet-stream', {'Expires': '0'}),
  "mfcc_1" : ('mfcc', open(mfcc_1, 'rb'), 'application/octet-stream', {'Expires': '0'}),
  "mfcc_2" : ('mfcc', open(mfcc_2, 'rb'), 'application/octet-stream', {'Expires': '0'}),
  "mfcc_3" : ('mfcc', open(mfcc_3, 'rb'), 'application/octet-stream', {'Expires': '0'}),
}

print( '---------------------- start enroll ----------------------')
testEnrollResponse = requests.post(server+sessionID, files = data, json = declaredParameters)

b'\r\n--c00750d1-8ce4-4d29-8390-b50bf02a92cc\r\nContent-Disposition: form-data; name="playbackHash"\r\nContent-Type: application/octet-stream\r\n\r\n\x16\x00\x00\x00\x00\x00\x00\x00serialization::archive\n\x00\x04\x08\x04 .... x00\x00R\x94\x9bp\x8c\x00\r\n--c00750d1-8ce4-4d29-8390-b50bf02a92cc\r\nContent-Disposition: form-data; name="usersMFCC"\r\nContent-Type: application/octet-stream\r\n\r\n\x16\x00\x00\x00\x00\x00\x00\x00serialization::archive\n\x00\x04\x08\x04\x08\x01\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x16\x00\x00\x00\x00\x00\x00u\xbd\xb4/\xda1\xea\xbf\x0f\xed\xa2<\xc9\xf8\xe7\xbf?\xd5\xf06u\xe7\xf0\xbf\xd4\x8d\xd4\xa1F\xbe\x03@\x85X!\x19\xd8A\x06@\x8co\xf7\r .....
x80\xd9\x95Yxn\xd0?\r\n--c00750d1-8ce4-4d29-8390-b50bf02a92cc\r\nContent-Disposition: form-data; name="scoreAndStatus"\r\nContent-Type: application/json; charset=utf-8\r\n\r\n{"lexLikelihood":1.544479046897232,"overallScore":-nan,"playbackLikelihood":-inf,"status":{"errorCode":0,"errorMessage":""}}\r\n--c00750d1-8ce4-4d29-8390-b50bf02a92cc--\r\n'

我用“.....”替换了更多的二进制数据

最佳答案

如果您收到一个multipart/form-data 响应,您可以像这样使用requests-toolbelt 库解析它:

$ pip install requests-toolbelt

安装后

from requests_toolbelt.multipart import decoder

testEnrollResponse = requests.post(...)
multipart_data = decoder.MultipartDecoder.from_response(testEnrollResponse)

for part in multipart_data.parts:
    print(part.content)  # Alternatively, part.text if you want unicode
    print(part.headers)

关于python - 解析多部分/表单数据,从请求后接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369306/

相关文章:

java - 在服务器上运行 java webservice

java - java服务器客户端编程如何与浏览器一起工作

sockets - 使用 TCP 类与 WebSocket 服务器通信

c - 向客户端 C 显示文件夹服务器的内容

python - 在特定位置打包/附加元素以创建元组

web-services - 如何忽略 Web 服务请求中的 SSL 证书错误?

python - Django - 没有这样的表 : main. auth_user__old

asp.net - 从非 Web 客户端调用 ASP.NET 2.0 身份验证服务

python - 即使有值,Matplotlib 绘图也显示为空白

python - 如何获取桌面应用程序当前的焦点元素