【问题标题】:How to handle special characters in URL with Flask如何使用 Flask 处理 URL 中的特殊字符
【发布时间】:2016-01-10 00:44:34
【问题描述】:

我正在使用 Flask 开发一个迷你 API 后端,我有以下 URL:

@app.route('/v1.0/post/check/<path:url>')
def check(url):
    print url
    //do some works

示例 API 调用如下所示: /v1.0/post/check/http://exampleside.com/enter1/index.php?app=forum&amp;act=threadview&amp;tid=14066185

我期望的是在代码中获取并打印URL字符串'http://exampleside.com/enter1/index.php?app=forum&amp;act=threadview&amp;tid=14066185',但实际上我真正得到的只是'http://exampleside.com/enter1/index.php'

似乎 Flask 认为是“?”和 '&' 作为特殊字符,然后自动拆分 URL。那么我应该怎么做才能在 Flask 中获取整个 URL?

【问题讨论】:

  • 那么您需要保存整个 URL 还是尝试提取参数?
  • @Chris Chambers 我想获取参数 ,但打印整个 URL 也可以,因为无论如何我都可以从中提取 url 参数。

标签: python url web flask


【解决方案1】:

您正在尝试传递 url,包括 url 上的请求参数。

你有两个选择。

明智的做法是在构建 URL 时对 URL 的那一部分进行 urlencode。这将安全地编码?和 & 符号。

这是一个示例,您可以判断它是否如此。这个:

Foo?g=one&two=2

看起来像这样:

Foo%3Fg%3Done%26two%3D2

这将是您的 api 的 uri 的最后一段。

第二个是从烧瓶拆分的所有参数中重建值。但这让我觉得工作量很大。

【讨论】:

  • 我是用 Chrome 来测试的,所以我只是把 API 调用粘贴到浏览器中,我认为它已经被 Chrome 编码了?
  • 似乎 chrome 并没有为我完成 urlencoding 工作,它在我明确编码 url 后才起作用。谢谢。
【解决方案2】:

这是因为 ?和 & 表示您正在接收 URL 中的参数。

要获取它们,您需要像这样使用请求对象: app = request.args.get('app')

如果您只想要整个 url、参数和所有内容,请尝试 Robert 的方法。

【讨论】:

  • 我试过 'whole_url = request.args.get('app') print whole_url' 然后我得到了 None
猜你喜欢
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 2016-09-23
  • 2010-11-19
  • 2016-02-04
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多