如何在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
答案 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
所示