我尝试使用flask将数据发布到网站,当我尝试返回数据时,我收到400 Bad Request错误。
这是我发送POST请求的python代码:
import httplib
import urllib
import base64
import json
import pandas as pd
import numpy as np
import requests
_url = 'https://api.projectoxford.ai/emotion/v1.0/recognizeInVideo'
_key = '<my key>'
_maxNumRetries = 10
paramsPost = urllib.urlencode({'outputStyle' : 'perFrame', \
'file':'my_file.mp4'})
headersPost = dict()
headersPost['Ocp-Apim-Subscription-Key'] = _key
headersPost['content-type'] = 'application/octet-stream'
jsonGet = {}
headersGet = dict()
headersGet['Ocp-Apim-Subscription-Key'] = _key
paramsGet = urllib.urlencode({})
responsePost = requests.request('post', _url + "?" + paramsPost, \
data =open('my_file.mp4','rb').read(), \
headers = headersPost)
print responsePost.status_code
这是服务器代码:
import requests
from random import randint
def Temp():
return randint(0,20)
data = {'windspeed':WindSpeed(), 'Temp': Temp(), 'WindDir':WindDir()}
r = requests.post('http://10.0.0.119', data = data)
print (r.text)
在浏览器中运行时会返回400错误,但客户端脚本会获得正确的响应:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route("/", methods=['GET','POST'])
def result():
data = request.get_json(force=True)
Temp = data['Temp']
return render_template('main.html', name=Temp)
if __name__ == "__main__":
app.run()
其中15是数据[&#39; Temp&#39;]变量。
答案 0 :(得分:4)
如果您只是导航到http://10.0.0.119
,那么您就会向def result()
发送GET请求,这会导致错误的请求,因为没有data['Temp']
< / p>
为了在浏览器中完成此工作,您需要从应用程序本身发送POST请求,然后才能查看它。
您的应用可能是:
import requests
from random import randint
from flask import Flask, request, render_template
app = Flask(__name__)
def Temp():
return randint(0,20)
@app.route("/", methods=['GET','POST'])
def result():
if request.method == 'POST':
data = request.form.get('data')
Temp = data['Temp']
return render_template('dispaly_data.html', name=Temp)
else:
data = {'Temp': Temp()}
return render_template('post_data.html', data=data)
if __name__ == "__main__":
app.run()
post_data.html
中的表单可能类似于:
<form action="/" method='post'>
<input type="hidden" name="data" value="{{ data }}"/>
<input type='submit' value='Send Post'>
</form>
答案 1 :(得分:2)
您发送了错误的请求。您必须使用json=data
将其作为JSON发送
r = requests.post('http://10.0.0.119', json=data)
答案 2 :(得分:0)
您不是在您的客户端发布JSON,也不是您的浏览器,因此不要尝试在服务器中将其作为JSON进行处理。只需使用request.form
为POST请求访问值,或使用request.args
访问GET请求:
@app.route("/", methods=['GET','POST'])
def result():
if request.method == 'POST':
data = request.form
else:
data = request.args
temp = data.get('Temp')
return render_template('main.html', name=temp)