我正在尝试在 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'
我的预期输出应该返回我们传递的整个网址https://example.org/de?=fg&hi=jk
最佳答案
这与 Flask 无关。您的网址并不代表您所认为的含义。
例如,这个网址:
localhost:8200//flip?url=https://example.org/de?=fg&hi=jk
...有两个查询参数:
url=https://example.org/de?=fg
hi=jk
&
分隔外部请求上的查询参数,因此它具有单独的 url
和 hi
参数。
首先在查询参数中包含许多此类字符也是非法的,但您通常会侥幸逃脱。
这就是为什么需要将 URL 嵌入其他 URL 的网站使用 percent encoding 。您的页面应该发送以下内容:
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
而不是 request.args
),然后手动对其进行解析,而不是让 Flask 或 Python 进行解析为您服务。
但无论哪种方式,这都非常棘手,除非绝对必要,否则您不应该考虑它。
另外,再说一遍,您的网址是非法的,并且您不想依赖“您通常会逃脱惩罚”。除非可以接受的是,比如说,某些用户将无法连接,因为他们的代理搞砸了 URL,而您整个周末都在 table 上敲头试图调试它,然后它对其中一些用户有效,但现在很少有人会得到错误的页面,然后新版本的 Chrome 突然打破了一些不同的东西,并且......
当您坚持标准时,HTTP 就已经足够复杂和困惑了,特别是因为您的框架为您完成了大部分繁重的工作。
关于python - 如何传递包含 url 的内容? ,/, & 里面的flask webservice方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50981036/