我正在尝试制作一个机器人,尽管发布请求必须使用XML,但我没有处理XML的经验,希望得到您的帮助。
请求有效负载看起来像这样:
------WebKitFormBoundaryyXmSIiVhzetQj7u9
Content-Disposition: form-data; name="Name"
asdafa
------WebKitFormBoundaryyXmSIiVhzetQj7u9
Content-Disposition: form-data; name="Description"
------WebKitFormBoundaryyXmSIiVhzetQj7u9
Content-Disposition: form-data; name="Genre"
All
------WebKitFormBoundaryyXmSIiVhzetQj7u9
Content-Disposition: form-data; name="thumbnailImageFile"; filename=""
Content-Type: application/octet-stream
我该如何在python中复制它?
我尝试过简单的事情,例如
create = s.post(url='https://www.url.com/', data=xml)
我还尝试过使用{'Content-Type':'application / xml'}这样的标题,但没有成功。
答案 0 :(得分:0)
似乎您正试图使用
multipart/form-data
格式。您可以使用requests
完成此操作
库中使用files
参数,该参数记录在
“ Post a multipart encoded
file”
文档的“部分”,其中显示了以下示例:
>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}
>>> result = requests.post(url, files=files)
这将导致以下数据发送到服务器:
Content-type: multipart/form-data; boundary=66702e4da1364ad181a6ef1437ed39ce
--66702e4da1364ad181a6ef1437ed39ce
Content-Disposition: form-data; name="file"; filename="report.csv"
some,data,to,send
another,row,to,send
--66702e4da1364ad181a6ef1437ed39ce--
如您所见,这几乎是您想要的,除了它包括
错误的filename
参数。如果您将不包括这些
传递None
作为文件名。为了更容易发送字典
使用这种格式,我编写了以下辅助方法:
def dict_to_multipart(d):
return {k: (None, v) for k, v in d.items()}
如果我们有如下数据:
data = {'Name': 'asdf', 'Genre': 'all'}
我们可以这样发送它:
result = requests.post('https://requestbin.fullcontact.com/1oso55v1',
files=dict_to_multipart(data))
在这种情况下,发送到Web服务器的数据如下:
Content-type: multipart/form-data; boundary=60eaef81347645b4b1e9a2f02634baca
--60eaef81347645b4b1e9a2f02634baca
Content-Disposition: form-data; name="Genre"
all
--60eaef81347645b4b1e9a2f02634baca
Content-Disposition: form-data; name="Name"
asdf
--60eaef81347645b4b1e9a2f02634baca--