我正在尝试为特定请求主体形成Web有效负载,但无法正确完成。我需要的是传递我的身体数据,如下所示
data={'file-data':{"key1": "3","key2": "6","key3": "8"}}
我的完整有效负载请求如下所示
payload={url,headers, data={'file-data':{"key1": "3","key2": "6","key3": "8"}},files=files}
然而,当我通过它时,python尝试解析每个单独的键值并像这样分配给'file-data'键
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"
}
我使用的python代码片段(检查建议后)是这样的:
#!/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--
答案 0 :(得分:0)
如果你想发布带有python请求的 JSON ,你应该不使用data
但是json
:
r = requests.post('http://httpbin.org/post', json={"key": "value"})
由于您的示例,我只能猜测您正在使用data
payload={url,headers, data={'file-data':{"key1": "3","key2": "6","key3": "8"}},files=files}
这是无效的python语法btw。