如何传递一个包含的 url ?, / , & 里面的flask webservice方法

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

请帮忙,提前致谢

aba*_*ert 5

这与 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)

&中隔离查询在外请求参数,因此它具有独立的urlhi参数。

首先在查询参数中包含许多这样的字符也是非法的,但您通常会侥幸逃脱。


这就是需要将 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 就足够复杂和混乱,尤其是因为您的框架为您完成了大部分繁重的工作。