Python 烧瓶:Flask.request.args.get replacement'+';url中有空格
我正在尝试使用flask服务器作为api,该api通过http get参数获取图像URL 我使用的是非常长的(在pastebin上),并且在url中包含许多Python 烧瓶:Flask.request.args.get replacement'+';url中有空格,python,flask,asp.net-web-api,Python,Flask,Asp.net Web Api,我正在尝试使用flask服务器作为api,该api通过http get参数获取图像URL 我使用的是非常长的(在pastebin上),并且在url中包含许多+。我在flask服务器中设置了以下路由 @webapp.route('/example', methods=['GET']) def process_example(): imageurl = flask.request.args.get('imageurl', '') url = StringIO.StringIO(ur
+
。我在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
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/aly/anaconda/lib/python2.7/urllib.py”,urlopen中的第87行
返回opener.open(url)
文件“/Users/aly/anaconda/lib/python2.7/urllib.py”,第208行,打开
返回getattr(self,name)(url)
open_数据中的文件“/Users/aly/anaconda/lib/python2.7/urllib.py”,第597行
data=base64.decodestring(数据)
文件“/Users/aly/anaconda/lib/python2.7/base64.py”,第321行,解码字符串
返回binascii.a2b_base64(s)
binascii.错误:填充不正确
进一步检查(即打印flask获得的imageurl)后,会发现+
字符被文字空格所取代,而文字空格似乎把事情搞砸了
flask.args.get
函数是否有可以处理此问题的选项?您需要正确编码查询参数;在中,空格编码为+
,而+
本身编码为%2B
不能告诉烧瓶以不同方式处理特定数据;您无法可靠地检测哪些数据编码正确,哪些数据编码错误。但是,您可以使用request.query\u string
手动从查询字符串中提取参数
更好的方法是正确地转义参数(例如,在JavaScript中使用)。+
字符不是Base64编码值中唯一有问题的字符;该格式还使用了/
和=
,这两种格式在URL中都有意义,这就是为什么会有一个URL
事实上,可能是
数据:
URL结尾的=
字符丢失了,这是错误填充错误消息的更直接原因。如果你把它加回去,接下来你确实会遇到问题,因为所有的+
字符都被解码成'
@Martijin\u Pieters嗨,我实际上并不是从我直接调用的网页输入url::/example?imageurl=。所以我认为这必须在烧瓶的水平上进行。request.query\u字符串是否合适?@Aly:那么您仍然负责对参数进行编码。您需要调用:/example?imageurl=
。