烧瓶问题和错误请求

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:// 解决了该问题。

【讨论】:

以上是关于烧瓶问题和错误请求的主要内容,如果未能解决你的问题,请参考以下文章

烧瓶发布请求和获取请求

我无法将发布请求从反应表单发送到烧瓶服务器 [重复]

请求获取和烧瓶邮件 Python

烧瓶单元测试:如何测试来自登录用户的请求

从请求中检索帖子数据的烧瓶速度很慢?

带有请求的烧瓶损坏的管道