【问题标题】:curl POST request卷曲 POST 请求
【发布时间】:2018-09-20 09:43:49
【问题描述】:

您好,我们在使用 curl 发布数据时遇到问题!

curl "http://127.0.0.1:8000/construct" -X POST -H "Content-Type: application/json" -d '{"journal_id": "JE000001", "entry_date" : "2016-11-06", "create_time" : "2016-11-06 18:00:00", "created_by": "Adam", "post_status": "P", "account_code" : "100000", "amount" : 16453.24, "dr_cr" : "C"}' 

返回 400

@app.route("/construct", methods = ['GET', 'POST'])
def construct():
if request.method == 'POST':
    data = request.form['data']
    data1 = loads(data)
    conn, cursor = database_connect()
    data1 = data_contruct_new(data1)
    data1['pre_hash'] = get_pre_hash(cursor)
    data1['nouce'] = call_nouce()
    data1['hash'] = call_hash(data1)
    conn.close()
    return jsonpify(data1)
else:
    return request.method # return method for test

【问题讨论】:

    标签: python curl


    【解决方案1】:

    您的服务需要双重编码的数据:

    data = request.form['data']
    data1 = loads(data)
    

    您不只是将请求的内容解析为 JSON,而是将请求的内容解析为 www-form-urlencoded,其中包含一个名为 data 的字段,然后将该表单字段的内容解析为JSON。

    form 字段是解析为表单的传入内容。如果您没有,请不要使用它。


    如果你想解析原始内容,那就是dataget_data

    data = request.data
    

    … 或:

    data = request.get_data()
    

    但是如果你在两边都做好了,你甚至不需要这个,只需要jsonget_json

    data1 = request.get_json()
    

    如果您出于某种原因确实需要双重编码数据,则需要在客户端生成该数据,并发送正确的 Content-Type。那看起来像这样一团糟:

    'curl "http://127.0.0.1:8000/construct" -X POST -F 'data=%7B%22journal_id%22%3A%20%22JE000001%22%2C%20%22entry_date%22%20%3A%20%222016-11 -06%22%2C%20%22create_time%22%20%3A%20%222016-11-06%2018%3A00%3A00%22%2C%20%22created_by%22%3A%20%22Adam%22%2C %20%22post_status%22%3A%20%22P%22%2C%20%22account_code%22%20%3A%20%22100000%22%2C%20%22amount%22%20%3A%2016453.24%2C%20 %22dr_cr%22%20%3A%20%22C%22%7D'

    希望您能看到这不是您真正想要的,除非损坏的服务器端完全不在您的掌控之中并且无法修复。

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 2015-10-27
      • 2017-05-10
      • 2011-12-08
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多