Python,XML以格式发送POST请求

时间:2018-06-23 07:17:14

标签: python xml python-requests

我正在尝试制作一个机器人,尽管发布请求必须使用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'}这样的标题,但没有成功。

1 个答案:

答案 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--