烧瓶问题和错误请求
Posted
技术标签:
【中文标题】烧瓶问题和错误请求【英文标题】:Problems with flask and bad request 【发布时间】:2018-08-29 13:57:16 【问题描述】:我正在为自己编写一个非常好的 api 来使用 json 从我的游戏服务器获取一些 json 数据到我的网络空间,
但每次我使用 Angular 发送请求时,我都会收到以下信息:127.0.0.1 - - [20/Mar/2018 17:07:33] 代码 400,消息错误请求版本(“▒\x9c▒▒▒ '\x12\x99▒▒▒\xadH\x00\x00\x14▒+▒/▒,▒0▒\x13▒\x14\x00/\x005\x00") 127.0.0.1 - - [20/Mar/2018 17:07:33] "▒\x9dtTc▒\x93▒4▒M▒▒▒▒▒\x9c▒▒▒'\x99▒▒▒▒H▒+▒ /▒,▒0▒▒/5" HTTPStatus.BAD_REQUEST - 127.0.0.1 - - [20/Mar/2018 17:07:33] 代码 400,消息错误请求语法('\x16\x03\x01\x00▒\x01\x00\x00\x9d\x03\x03▒k, &▒▒ua\x8c\x82\x17\x05▒QwQ$▒0▒▒\x9f▒B1\x98\x19W▒▒▒▒\x00\x00\x14▒+▒/▒,▒0▒\x13▒\ x14\x00/\x005\x00') 127.0.0.1 - - [20/Mar/2018 17:07:33] "▒\x9d▒k,&▒▒ua\x8c\x82▒QwQ$▒0▒▒\x9f▒B1\x98W▒▒▒▒▒ +▒/▒,▒0▒▒/5" HTTPStatus.BAD_REQUEST - 127.0.0.1 - - [20/Mar/2018 17:07:33] 代码 400,消息错误请求语法 ('\x16\x03\x01\x00▒\x01\x00\x00▒\x03\x03)▒▒\ x1e\xa0▒\t\r\x14g%▒▒\x17▒▒\x80\x8d▒F▒▒\x08U▒ġ▒▒\x06▒\x00\x00\x1c▒+▒/▒,▒0▒ ') g%▒▒▒▒\x80\x8d▒F▒U▒ġ▒▒▒▒+▒/▒,▒0▒" HTTPStatus.BAD_REQUEST -
我的 api
from flask import Flask, jsonify
from flaskext.mysql import MySQL
from flask_cors import CORS, cross_origin
app = Flask(__name__)
CORS(app)
app.config['CORS_HEADERS'] = 'Content-Type'
cors = CORS(app, resources=r"/punishments": "origins": "http://localhost:5000" "*")
mysql = MySQL()
# MySQL configurations
app.config['MYSQL_DATABASE_USER'] = 'test'
app.config['MYSQL_DATABASE_PASSWORD'] = 'Biologie1'
app.config['MYSQL_DATABASE_DB'] = 'test'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
@app.route('/punishments', methods=['GET'])
@cross_origin(origin='localhost:5000',headers=['Content- Type','Authorization'])
def get():
cur = mysql.connect().cursor()
cur.execute('''select * from test.punishments''')
r = [dict((cur.description[i][0], value)
for i, value in enumerate(row)) for row in cur.fetchall()]
return jsonify('punishments' : r)
if __name__ == '__main__':
app.run()
我的客户端功能
export class ApiUserService
private _postsURL = "https://localhost:5000/punishments";
constructor(private http: HttpClient)
getPosts(): Observable<Punishments[]>
let headers = new HttpHeaders();
headers = headers.set('Content-Type', 'application/json; charset=utf-8');
return this.http
.get(this._postsURL,
headers: 'Content-Type':'application/json; charset=utf-8'
)
.map((response: Response) =>
return <Punishments[]>response.json();
)
.catch(this.handleError);
private handleError(error: Response)
return Observable.throw(error.statusText);
【问题讨论】:
您似乎发送了格式错误的请求。您可能不想在 request 上设置“content-type”标头。另一个可能的原因是您正在尝试执行跨域请求。您是否看到任何客户端错误? 【参考方案1】:我遇到了和你一样的错误。
我的烧瓶服务器安装在respberry-pi
中,我试图使用https://ip:5000
访问它。
问题是我使用的是https
而不是http
。
当我将其更改为 http://ip:5000
时,它起作用了。
【讨论】:
在类似的情况下,我被困了 4 个小时。如此简单,如此合乎逻辑。 *** 的美妙之处在于你的回答可以节省别人的时间。 很高兴它对您有所帮助 你真的救了我!我忘了从一个 API 到另一个 API 的测试中删除“s”!!【参考方案2】:我也遇到了同样的问题
只使用 http 而不是 https :-
http://ip:portnumber
【讨论】:
请有人给这个人一枚奖章。 我看不出这与一年前 Prakash 的回答有何不同...【参考方案3】:最近我也遇到了这个问题,问题来自我应用程序上的 SSL 配置。
在我的 .env 中,我将SSL_DISABLE
设置为False
,然后将其更改为True
。
将SSL_DISABLE=False
更改为SSL_DISABLE=True
所以,这里的重点是:检查您的 URL,可能是这样的:https://127.0.0.1:5000
,只需将其更改为 http://127.0.0.1:5000
。
希望它对将来也面临此问题的人有所帮助。
【讨论】:
【参考方案4】:就我而言,我试图调试在烧瓶上运行的 SocketIo 服务器。我试图使用导致错误请求的 wss://
访问服务器。将其更改为 ws://
解决了该问题。
【讨论】:
以上是关于烧瓶问题和错误请求的主要内容,如果未能解决你的问题,请参考以下文章