我正在尝试为特定的请求主体形成一个Web负载,但无法正确地获取它。我需要的是通过我的身体数据如下python将字典的字面值分配给另一个字典的键
data={'file-data':{"key1": "3","key2": "6","key3": "8"}}
我完成有效载荷的请求是这样
payload={url,headers, data={'file-data':{"key1": "3","key2": "6","key3": "8"}},files=files}
然而,当我通过这一点,巨蟒试图解析每个单独的键值,并赋值给像这样的'文件数据'键
file-data=key1
file-data=key2
file-data=key3
对于我在嵌套字典中传递的尽可能多的密钥等等。然而,要求是通过整个字典作为这样文字内容(不通过每个键分裂的值):
file-data={"key1": "3","key2": "6","key3": "8"}
预期HTTP跟踪应该因此理想地是这样的:
POST /sample_URL/ HTTP/1.1
Host: sample_host.com
Authorization: Basic XYZ=
Cache-Control: no-cache
Content-Type: multipart/form-data; boundary=----UVWXXXX
------WebKitFormBoundaryXYZ
Content-Disposition: form-data; name="file-data"
{"key1": "3","key2": "6","key3":"8" }
------WebKitFormBoundaryMANZXC
Content-Disposition: form-data; name="file"; filename=""
Content-Type:
------WebKitFormBoundaryBNM--
因此,我想用它作为POST请求的有效负载的一部分(使用python请求库)。任何建议都理解在高级 -
EDIT1:为了提供更清楚起见,API定义是这样的:
Body
Type: multipart/form-data
Form Parameters
file: required (file)
The file to be uploaded
file-data: (string)
Example:
{
"key1": "3",
"key2": "6",
"key3": "8"
}
蛇皮代码段我用(检查建议后)是这样的:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
url = "https://sample_url/upload"
filepath='mypath'
filename='logo.png'
f=open(filepath+'\\'+filename)
filedata={'file-data':"{'key1': '3','key2': '6','key3': '8'}"}
base64string = encodestring('%s:%s' % ('user', 'password').replace('\n', '')
headers={'Content-type': 'multipart/form-data','Authorization':'Basic %s' % base64string}
r = requests.post(url=url,headers=headers,data=filedata,files={'file':f})
print r.text
我现在得到的错误仍然是相同的,如下图所示:
{"statusCode":400,"errorMessages":[{"severity":"ERROR","errorMessage":"An exception has occurred"]
它还表示有些条目缺失或不正确。请注意,我试图传递文件参数在二进制模式下打开它,以及之后,但它抛出同样的错误消息
我通过Python打印出HTTP跟踪过,它看起来像这样:
send: 'POST sample_url HTTP/1.1
Host: abc.com
Connection: keep-alive
Accept-Encoding: gzip,deflate
Accept: */*
python-requests/2.11.1
Content-type: multipart/form-data
Authorization: Basic ABCDXXX=
Content-Length: 342
--CDXXXXYYYYY
Content-Disposition:form-data; name="file-data"
{\'key1\': \'3\',\'key2\': \'6\'
,\'key3\': \'8\'}
--88cdLMNO999999
Content-Disposition: form-data; name="file";
filename="logo.png"\x89PNG\n\r\n--cbCDEXXXNNNN--
你能告诉你如何分配和传递数据吗? – NoobEditor
也许你应该把你的对象串起来。这样做,文件数据将包含您的对象作为一个字符串。 – iFlo
@NoobEditor我传递的数据为:** data = {'file-data':{“key1”:“3”,“key2”:“6”,“key3”:“8”}} **如我的问题所示 –