pyd*_*pyd 2 python regex web-services request flask
嗨,我正在尝试在 Flask 方法中传递一个 URL,
My url: https://example.org/de?=fg&hi=jk
Run Code Online (Sandbox Code Playgroud)
我尝试了以下步骤:
@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'
Run Code Online (Sandbox Code Playgroud)
我的预期输出应该返回我们传递的整个 url https://example.org/de?=fg&hi=jk
请帮忙,提前致谢
这与 Flask 无关。您的网址并不意味着您认为它们的含义。
例如,这个网址:
localhost:8200//flip?url=https://example.org/de?=fg&hi=jk
Run Code Online (Sandbox Code Playgroud)
... 有两个查询参数:
url=https://example.org/de?=fg
hi=jk
Run Code Online (Sandbox Code Playgroud)
的&中隔离查询在外请求参数,因此它具有独立的url和hi参数。
首先在查询参数中包含许多这样的字符也是非法的,但您通常会侥幸逃脱。
这就是需要将 URL 嵌入其他 URL 的网站使用百分比编码的原因。您的页面应该发送:
localhost:8200//flip?url=https%3A//example.org/de%3F%3Dfg%26hi%3Djk
Run Code Online (Sandbox Code Playgroud)
现在只有一个查询参数:
url=https%3A//example.org/de%3F%3Dfg%26hi%3Djk
Run Code Online (Sandbox Code Playgroud)
然后,当你解析查询字符串时,你得到的是:
url=https://example.org/de?=fg&hi=jk
Run Code Online (Sandbox Code Playgroud)
如果您真的无法在客户端解决问题,您可以迭代所有查询参数并尝试将它们重新组合成一个url参数。
或者,您可以获取整个 URL(request.url而不是request.args),然后手动对其进行解析,而不是让 Flask 或 Python 为您进行解析。
但无论哪种方式,这真的很hacky,除非绝对必要,否则您不应该考虑它。
另外,你的 URL 是非法的,你不想依赖“你会经常逃脱它”。除非这是可以接受的,比如说,一些用户将无法连接,因为他们的代理搞砸了 URL,你整个周末都在桌子上试图调试它,然后它对他们中的一些人有效,但是现在很少有人弄错页面了,然后新版本的 Chrome 突然打破了一些不同的东西,而且……
当您坚持标准时,HTTP 就足够复杂和混乱,尤其是因为您的框架为您完成了大部分繁重的工作。