如何传递包含的网址? ,/和&内烧瓶Web服务方法

时间:2018-06-22 05:12:05

标签: python regex web-services flask request

嗨,我正在尝试在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 个答案:

答案 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非常复杂且混乱,尤其是因为您的框架为您完成了大部分繁重的工作。