Получение ссылки 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')