gpt4 book ai didi

python - Flask:flask.request.args.get 将 '+' 替换为 url 中的空格

转载 作者:太空狗 更新时间:2023-10-29 21:39:40 24 4
gpt4 key购买 nike

我正在尝试将 flask 服务器用于通过 http get 参数获取图像 url 的 api。

我正在使用这个 url example这很长(在 pastebin 上)并且在 url 中包含许多 +。我在我的 flask 服务器中设置了以下路由

@webapp.route('/example', methods=['GET'])
def process_example():
imageurl = flask.request.args.get('imageurl', '')
url = StringIO.StringIO(urllib.urlopen(imageurl).read())
...

但我遇到的问题是

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/aly/anaconda/lib/python2.7/urllib.py", line 87, in urlopen
return opener.open(url)
File "/Users/aly/anaconda/lib/python2.7/urllib.py", line 208, in open
return getattr(self, name)(url)
File "/Users/aly/anaconda/lib/python2.7/urllib.py", line 597, in open_data
data = base64.decodestring(data)
File "/Users/aly/anaconda/lib/python2.7/base64.py", line 321, in decodestring
return binascii.a2b_base64(s)
binascii.Error: Incorrect padding

经过进一步检查(即打印 flask 获取的 imageurl),+ 字符似乎被文字空格替换,这似乎把事情搞砸了。

flask.args.get 函数是否有一个选项可以处理这个问题?

最佳答案

您需要正确编码您的查询参数;在 URL query paramater encoding ,空格被编码为+,而+本身被编码为%2B

不能告诉 Flask 以不同方式处理特定数据;您无法可靠地检测出哪些数据已正确编码,哪些未正确编码。但是,您可以使用 request.query_string 手动从查询字符串中提取参数。

更好 的方法是正确转义您的参数(例如,在 JavaScript 中,使用 encodeURIComponent() )。 + 字符不是 Base64 编码值中唯一有问题的字符;该格式还使用 /=,它们都在 URL 中具有含义,这就是为什么有 URL-safe variant 的原因.

事实上,可能是 data: URL 末尾的 = 字符丢失了,这是 不正确填充的更直接原因 错误信息。如果你把它加回去,你接下来确实会遇到所有 + 字符都被解码为 ' ' 的问题。

关于python - Flask:flask.request.args.get 将 '+' 替换为 url 中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28985787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com