请求必须是多部分/混合json和照片没有标题

时间:2017-08-02 08:32:02

标签: python http python-requests

如何在Python中发送POST请求?请求必须是多部分/混合json和照片没有标题。我尝试使用python中的请求发送此请求,但是此包向Data添加了描述,请求将json分成几个部分。 photo上正确请求结构的示例。这是我的代码:

photo = open("photo.jpg", "rb")
file = {
    "Data": photo
}
new_card = {
    "AlternateId": "4558021a-4c29-5360-a511-08c59b52265c",
    "CreatedBy": "1",
    "Information": "test",
    "IsActive": True,
    "IsDeleted": False,
    "UserGroupId": 3,
    "PersonCardCategoryId": 3
}
r = requests.post("http://172.16.127.160:34015", auth=("1", "1"), data=new_card, files=file)

更新

代码:

r = requests.post("http://172.16.127.160:34015", auth=("1", "1"), json=new_card, files=file)

现在,WireShark向我展示了it

2 个答案:

答案 0 :(得分:0)

  

问题:请求必须是多部分/混合json和照片没有标题

您的问题示例代码并不尊重json必须通过的方式:
要发布json,请执行以下操作:

  

more-complicated-post-requests

import json
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload), files=files)
     

您也可以使用json参数(在版本2.4.2中添加)直接传递它,而不是自己编码dict,它将自动编码:

payload = {'some': 'data'}
r = requests.post(url, json=payload, files=files)

答案 1 :(得分:0)

请求内容类型'multipart / mixed'与json和照片没有标题。

import requests
import json
from cStringIO import StringIO
headers = {
    '...': "...", 
    '...': "..."}
json = StringIO(json.dumps(new_card))
file = open('C:\\temp\\D.jpg', 'rb').read()
files = {"json": (None, json, "application/json; charset=UTF-8"), None: (None, file)}
r = requests.post('http://127.0.0.1:34015', files=files, headers=headers)

讨论此问题https://github.com/requests/requests/issues/1736

考虑下一件事 - 'multipart / mixed'没有必要在标题中的内容类型中指定。最重要的是应该有一个边界。 您也可以自己构建查询,如Python Requests Multipart HTTP POST

所示