python - 如何传递包含 url 的内容? ,/, & 里面的flask webservice方法

标签 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'

我的预期输出应该返回我们传递的整个网址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

& 分隔外部请求上的查询参数,因此它具有单独的 urlhi 参数。

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


这就是为什么需要将 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/

相关文章:

python - 如何使用水平投影清理二进制图像?

python - 如果行不是以列表中的项目开头

python - 我们如何从Python文本中提取特定的测试

html - 需要一个正则表达式来匹配多个类之一

web-services - Delphi Web 服务如何工作? (在运行时添加方法??)

python - numpy 掩码数组的奇怪行为

regex - HTML5 模式 - 不允许以下字符

r - 将文本文件中的谷歌评论转换为 rmarkdown 脚注

web-services - 什么是服务发现,为什么需要它?

ios - NSMutableURLRequest 处理 SOAP 请求中的特殊字符