Python Flask通过HTTPS向客户端发送字典类型数据失败求助
解决Flask通过HTTPS发送字典数据失败的问题
看起来你遇到的问题是用requests发送字典数据时,客户端无法正确解析——这通常是因为数据格式不匹配导致的。我来帮你拆解原因和解决办法:
问题根源
当你把字典datadict传给requests的data参数时,requests默认会把它编码成application/x-www-form-urlencoded(表单格式)发送,但很多客户端(尤其是API服务)期望接收的是application/json格式的JSON数据。这种格式不匹配就会导致客户端无法处理你发送的数据。
快速解决方法
最简单的修改是把data=datadict替换成json=datadict——requests会自动帮你完成JSON序列化,并设置正确的请求头:
@xyz.route('/hello', methods=['GET', 'POST']) def hello(): message = request.args.get("messagetosend") datadict = {"sendingData": message} url = "https://IP:PORT" certificate = "stack.f1" keys = "stack.f2" cert = (certificate , keys ) # 把data换成json参数 r = requests.request("POST", url, verify=False, cert=cert, json=datadict) return "dataPosted"
备选方案(手动序列化)
如果你需要更精细的控制,也可以手动将字典序列化为JSON字符串,并显式设置请求头:
import json @xyz.route('/hello', methods=['GET', 'POST']) def hello(): message = request.args.get("messagetosend") datadict = {"sendingData": message} url = "https://IP:PORT" certificate = "stack.f1" keys = "stack.f2" cert = (certificate , keys ) # 手动序列化并设置Content-Type头 headers = {'Content-Type': 'application/json'} r = requests.request("POST", url, verify=False, cert=cert, data=json.dumps(datadict), headers=headers) return "dataPosted"
额外提示
同时要确认客户端的接收逻辑是否匹配:
- 如果客户端也是Flask服务,需要用
request.get_json()来解析JSON数据,而不是request.form(后者是处理表单数据的)。 - 如果客户端是其他语言/框架,也要确保它在接收时按照JSON格式解析请求体。
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

