curl POST请求

时间:2018-04-10 17:03:02

标签: python curl

您好我们在使用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

1 个答案:

答案 0 :(得分:0)

您的服务期待双重编码数据:

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%22℃%22%7D'

希望您可以看到这不是您真正想要的,除非破坏的服务器端完全不在您手中且无法修复。