You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:11:11