首页 > 解决方案 > flask-错误的 URL 编码

问题描述

我在 Flask 和 flask-rest-jsonapi 规范中遇到了非常奇怪的问题。

如果我使用邮递员发送以下网址,我会得到非常奇怪的行为:-

无效的网址:-

http://127.0.0.1:5000/v1/recordings?filter=[
  {
    "name": "rtags",
    "op": "any",
    "val": {
      "name": "tag",
      "op": "ilike",
      "val": "%car%"
    }
  }
]

在编码的 url 中, ca 被不同的字符 %EF%BF%BD 替换。

http://127.0.0.1:5000/v1/recordings?filter=%5B%0A++%7B%0A++++%22name%22%3A+%22rtags%22%2C%0A++++%22op%22%3A+%22any%22%2C%0A++++%22val%22%3A+%7B%0A++++++%22name%22%3A+%22tag%22%2C%0A++++++%22op%22%3A+%22ilike%22%2C%0A++++++%22val%22%3A+%22**%EF%BF%BD**r%25%22%0A++++%7D%0A++%7D%0A%5D

但是,如果我发送而不是汽车一些不同的词,例如交通,那么编码的 url 字符串就可以了。

工作网址:-

http://127.0.0.1:5000/v1/recordings?filter=[
  {
    "name": "rtags",
    "op": "any",
    "val": {
      "name": "tag",
      "op": "ilike",
      "val": "%traffic%"
    }
  }
] 

例如

"http://127.0.0.1:5000/v1/recordings?filter=%5B%0A++%7B%0A++++%22name%22%3A+%22rtags%22%2C%0A++++%22op%22%3A+%22any%22%2C%0A++++%22val%22%3A+%7B%0A++++++%22name%22%3A+%22tag%22%2C%0A++++++%22op%22%3A+%22ilike%22%2C%0A++++++%22val%22%3A+%22%25**traffic**%25%22%0A++++%7D%0A++%7D%0A%5D"

此外,如果我将断点放在 app.py Flask 文件中,我会得到前两个字符作为大写“CAr”而不是“car”,这是我在查询字符串参数中发送的。

<Request 'http://127.0.0.1:5000/v1/recordings?filter=%5B%0A%20%20%7B%0A%20%20%20%20%22name%22:%20%22rtags%22,%0A%20%20%20%20%22op%22:%20%22any%22,%0A%20%20%20%20%22val%22:%20%7B%0A%20%20%20%20%20%20%22name%22:%20%22tag%22,%0A%20%20%20%20%20%20%22op%22:%20%22ilike%22,%0A%20%20%20%20%20%20%22val%22:%20%22%CAr%25%22%0A%20%20%20%20%7D%0A%20%20%7D%0A%5D' [GET]>}

标签: python-3.xflaskurlencodeflask-restless

解决方案


推荐阅读