在 werkzeug 请求中检索 url 锚点

发布于 2024-12-07 14:45:39 字数 327 浏览 0 评论 0原文

我有一个 DAV 协议,它在 url 锚点中存储带外数据,例如 DELETE /abc.def#ghi 中的 ghi。服务器是 Flask 应用程序。

我可以看到请求通过 tcpdump 传入,但是当我查看 werkzeug Request 对象(例如 url() 或 base_url())时,我得到的只是 / abc.def#ghi 已被删除。

是否有返回此信息的方法,或者我是否必须子类化 Request 来自己处理此信息?如果是这样,有什么例子可以作为我的灵感吗?

I have a DAV protocol that stores out-of-band data in the url anchor, e.g. the ghi in DELETE /abc.def#ghi. The server is a Flask application.

I can see the request come in on the wire via tcpdump, but when I look at the werkzeug Request object (such as url() or base_url()), all I get back is /abc.def. The #ghi has been stripped out.

Is there a method that returns this information, or do I have to subclass Request to handle this myself? If so, is there an example I can use as an inspiration?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

酷炫老祖宗 2024-12-14 14:45:39

我遇到了同样的问题。 Facebook 身份验证 API 返回附加到重定向 URL 的哈希后面的访问令牌。同样,Flask 的 request.url 会删除井号后面的 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

如果您设法在 Werkzeug 中执行此操作,我很想知道如何操作。

I ran into the same problem. Facebook authentication API returns the access token behind a hash appended into the redirection url. In the same way, Flask's request.url drops everything in the URL behind the hash sign.

I'm also using Flask so I think you can use my brute-force workaround using Javascript's window.location.href to get the full URL. Then, I just extracted the piece that I needed (the access token), put it into a redirection URL where I can pass the access token as an argument to the receiving view function. Here's the code:

@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

In case you manage(d) to do this within Werkzeug, I'm interested to know how.

怕倦 2024-12-14 14:45:39

来自维基百科(片段标识符)(没有时间在 RFC 中找到它):

片段标识符的功能与 URI 的其余部分不同:即,它的处理完全在客户端进行,没有服务器的参与

因此 Flask - 或任何其他框架 - 无法访问 #ghi

From Wikipedia (Fragment Identifier) (don't have the time to find it in the RFC):

The fragment identifier functions differently than the rest of the URI: namely, its processing is exclusively client-side with no participation from the server

So Flask - or any other framework - doesn't have access to #ghi.

栖竹 2024-12-14 14:45:39

您可以使用 flask.url_for来执行此操作_anchor 关键字参数:

url_for('abc.def', _anchor='ghi')

You can do this using flask.url_for with the _anchor keyword argument:

url_for('abc.def', _anchor='ghi')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文