9

帯域外データをURLアンカーに格納するDAVプロトコルがあります(例:ghiin)DELETE /abc.def#ghi。サーバーはFlaskアプリケーションです。

リクエストがネットワーク経由tcpdumpで届くのを確認できますが、werkzeug Requestオブジェクト(url()やbase_url()など)を見ると、返されるのは。だけです/abc.def。は#ghi削除されました。

この情報を返すメソッドはありますか、それともこれを自分で処理するためにRequestをサブクラス化する必要がありますか?もしそうなら、私がインスピレーションとして使用できる例はありますか?

4

3 に答える 3

14

私は同じ問題に遭遇しました。Facebook 認証 API は、リダイレクト URL に追加されたハッシュの背後にあるアクセス トークンを返します。同様に、Flask の request.url は、URL 内のすべてをハッシュ記号の後ろにドロップします。

私は Flask も使用しているので、完全な URL を取得するには、Javascript の window.location.href を使用してブルート フォースの回避策を使用できると思います。次に、必要な部分 (アクセス トークン) を抽出し、それをリダイレクト URL に配置して、アクセス トークンを引数として受信ビュー関数に渡すことができます。コードは次のとおりです。

@app.route('/app_response/<response>', methods=['GET'])
def app_response_code(response):
    return '''  <script type="text/javascript">
                var token = window.location.href.split("access_token=")[1]; 
                window.location = "/app_response_token/" + token;
            </script> '''

@app.route('/app_response_token/<token>/', methods=['GET'])
def app_response_token(token):
    return token

Werkzeug 内でこれを行うことができた場合は、その方法を知りたいです。

于 2011-10-23T15:07:43.810 に答える
14

ウィキペディアから ( Fragment Identifier ) (RFC で見つける時間がありません):

フラグメント識別子の機能は、URI の残りの部分とは異なります。つまり、その処理は、サーバーからの参加なしにクライアント側のみで行われます。

そのため、Flask (またはその他のフレームワーク) は にアクセスできません#ghi

于 2013-02-11T09:52:05.847 に答える
2

これは、 flask.url_for_anchorキーワード引数を使用して行うことができます。

url_for('abc.def', _anchor='ghi')
于 2014-11-18T07:36:20.300 に答える