嗨,我正在尝试在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
请帮助,在此先感谢
答案 0 :(得分:4)
这与Flask无关。您的网址并不代表您的意思。
例如,此URL:
Processing: Item 0
Processing: Item 1
Processing: Item 2
Processing: Item 3
Processing: Item 9
…有两个查询参数:
localhost:8200//flip?url=https://example.org/de?=fg&hi=jk
url=https://example.org/de?=fg
hi=jk
分隔外部请求上的查询参数,因此它具有独立的&
和url
参数。
首先在查询参数中包含许多这些字符也是违法的,但是您常常会无视它。
这就是为什么需要在其他URL中嵌入URL的网站使用percent encoding的原因。您的页面应该发送以下消息:
hi
现在只有一个查询参数:
localhost:8200//flip?url=https%3A//example.org/de%3F%3Dfg%26hi%3Djk
然后,当您解析查询字符串时,得到的是:
url=https%3A//example.org/de%3F%3Dfg%26hi%3Djk
如果您确实无法在客户端解决问题,则可以迭代所有查询参数,然后尝试将它们重新组合为一个url=https://example.org/de?=fg&hi=jk
参数。
或者您可以获取整个URL(url
而不是request.url
),然后手动对其进行解析,而不是让Flask或Python帮您解决。
但是无论哪种方式,这都是很棘手的,除非绝对必要,否则您不应该考虑它。
再加上一次,您的URL是非法的,并且您不想依靠“您经常会摆脱它”。举例来说,除非可以接受,否则某些用户将无法连接,因为他们的代理人将URL弄乱了,并且整个周末您都花了很多时间试图调试它,然后才对某些用户有效,但是现在几乎没有人得到错误的页面,然后新版本的Chrome突然出现了问题,并且……
当您遵循标准时,HTTP非常复杂且混乱,尤其是因为您的框架为您完成了大部分繁重的工作。