web-dev-qa-db-ja.com

Python / Flaskで意図的に400の不正なリクエストを発生させる方法は?

私のREST APIのコンシューマーは、時々400 Bad Request --The request sent by the client was syntactically incorrect.エラーを返すと言っています。

私のアプリケーション(Python/Flask)ログはこれをキャプチャしていないようで、Webサーバー/ Nginxログもキャプチャしていません。

編集:デバッグの目的でFlaskで400の不正なリクエストを発生させたいのですが、どうすればよいですか?

ジェームズのアドバイスに従って、私は次のようなものを追加しました。

@app.route('/badrequest400')
def bad_request():
    return abort(400)

これを呼び出すと、flaskは次のHTMLを返します。これは、「クライアントから送信された要求が構文的に正しくありませんでした」という行を使用していません。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>

(なぜ<body>タグが含まれていないのかわかりません。

400エラーメッセージにはさまざまなバリエーションがあるように思われます。たとえば、Cookieを長さ50,000の値に設定すると(PostmanでInterceptorを使用)、代わりにFlask)から次のエラーが発生します。

<html>
<head>
    <title>Bad Request</title>
</head>
<body>
    <h1>
        <p>Bad Request</p>
    </h1>
Error parsing headers: 'limit request headers fields size'

</body>
</html>

400エラーのさまざまなバリエーションを介してFlaskを取得する方法はありますか?

10
Matthew Moisen

abortを使用して、ステータスコードによってHTTPエラーを発生させることができます。

from flask import abort
@app.route('/badrequest400')
def bad_request():
    abort(400)
9
James Scholes

ステータスコードをreturnの2番目のパラメータとして返すことができます。以下の例を参照してください。

@app.route('/my400')
def my400():
    code = 400
    msg = 'my message'
    return msg, code
22
John

カスタムメッセージエラーでabortを使用することもできます。

from flask import abort
abort(400, 'My custom message')

https://flask-restplus.readthedocs.io/en/stable/errors.html を参照してください

1
Xtonev