我尝试在Flask方法中传递URL,
My url: https://example.org/de?=fg&hi=jk
我尝试了以下步骤:
@app.route('/flip/<path:url>')
def flip(url):
return "retrievved url:"+str(url)
calling the url : localhost:8200//flip/https://example.org/de?=fg&hi=jk
returns : `https://example.org/de`
and another method,
@app.route('/flip')
def flip(url):
url=request.args.get('url')
return "retrievved url:"+str(url)
calling the url: localhost:8200//flip?url=https://example.org/de?=fg&hi=jk
returns : 'https://example.org/de?=fg'
我的预期输出应该返回我们传递的完整url https://example.org/de?=fg&hi=jk
1条答案
按热度按时间0lvr5msh1#
这与Flask无关。您的URL并不代表您所认为的意思。
例如,此URL:
...有两个查询参数:
&
分隔外部请求上的查询参数,因此它具有单独的url
和hi
参数。首先,在查询参数中使用许多这样的字符也是非法的,但您通常可以侥幸逃脱。
这就是为什么需要在其他URL中嵌入URL的网站使用percent encoding的原因。
现在只有一个查询参数:
然后,当您解析查询字符串时,得到的结果是:
如果确实无法在客户端修复问题,可以迭代所有查询参数,并尝试将它们重新组合为一个
url
参数。或者,您可以获取整个URL(
request.url
而不是request.args
),并手动对其进行解析,而不是让Flask或Python为您解析。但无论哪种方式,这真的是黑客,你不应该考虑它,除非绝对必要。
另外,你的URL是非法的,你不想依赖于“你经常会逃脱惩罚”。除非它是可以接受的,比如说,一些用户将无法连接,因为他们的代理搞砸了URL,你花了整个周末撞你的头在table上试图调试它,然后它为他们中的一些人工作,但现在有几个得到错误的页面,然后新版Chrome突然打破了一些不同的东西,然后...
当你坚持标准的时候,HTTP已经够复杂和混乱的了,特别是当你的框架为你做了大部分繁重的工作的时候。