Получение ссылки URL в запросе werkzeug

У меня есть протокол DAV, который хранит внеполосные данные в привязке URL, например, ghi в DELETE /abc.def#ghi, Сервер является приложением Flask.

Я вижу, что запрос поступил по проводам через tcpdump, но когда я смотрю на объект запроса werkzeug (например, url() или base_url()), все, что я получаю, это /abc.def, #ghi был раздет

Есть ли метод, который возвращает эту информацию, или мне нужно сделать подкласс Request, чтобы обработать это самостоятельно? Если да, то есть ли пример, который я могу использовать в качестве вдохновения?

3 ответа

Из Википедии ( Идентификатор фрагмента) (у меня нет времени, чтобы найти его в RFC):

Идентификатор фрагмента функционирует не так, как остальная часть URI, а именно: его обработка выполняется исключительно на стороне клиента без участия сервера.

Так что Flask - или любой другой фреймворк - не имеет доступа к #ghi,

Я столкнулся с той же проблемой. API аутентификации Facebook возвращает токен доступа за хешем, добавленным в URL перенаправления. Таким же образом, request.url Flask отбрасывает все в URL за хеш-символом.

Я также использую Flask, так что я думаю, что вы можете использовать мой обходной путь, используя Javascript window.location.href, чтобы получить полный URL. Затем я просто извлек нужную часть (токен доступа), поместил ее в 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

Если вам удастся (d) сделать это в Werkzeug, мне интересно узнать, как это сделать.

Вы можете сделать это с помощью flask.url_for с _anchor Ключевой аргумент:

url_for('abc.def', _anchor='ghi')
Другие вопросы по тегам