从请求瓶中获取json

时间:2017-03-30 19:40:06

标签: python json http flask

客户代码:

import requests
import json

url = 'http://127.0.0.1:5050/login'
user = "newUser"
password = "password"
headers = {'content-type': 'application/json'}
response = requests.post(url, data={"user": user,"pass": password}, headers = headers)

服务器代码:

from flask import Flask, request, make_response

app = Flask(__name__)


@app.route('/login', methods=['GET','POST'])
def login():    
 if request.method == 'POST':

    username = request.form.get("user")
    password = request.form.get("pass")
    //more code
    return make_response("",200)

if __name__ == "__main__":
     app.run(host = "127.0.0.1", port = 5050)

问题是我的用户名和密码始终为无。

我也尝试过使用:

content = request.get_json(force = True) 
password = content['pass']

request.form['user']

当我打印我的内容时:<请求'http://127.0.0.1:5050/login'[POST]> 。所以我找不到客户端发送的json。

编辑:

我确实添加了json.dumps并使用了request.get_json()并且它正常工作

3 个答案:

答案 0 :(得分:8)

您正在发送表单编码数据,而不是JSON。仅设置内容类型不会将您的请求转换为JSON。使用json=发送JSON数据。

response = requests.post(url, json={"user": user,"pass": password})

使用以下方法检索Flask中的数据:

data = request.get_json()

答案 1 :(得分:2)

我尝试执行您发布的相同代码,并且我能够获取usernamepassword而不是None的值。

enter image description here

答案 2 :(得分:1)

我最初的猜测是,由于您没有在请求中设置Content-Type标头,Flask不了解它应该能够解析数据。尝试添加值为application/json的Content-Type标头,看看是否能让您获得所需的位置。

另一件需要注意的事情是,当我点击登录页面时,浏览器会将Content-Type标头设置为 application/x-www-form-urlencoded并将数据编码为user=asdf&passwd=asdf