我正尝试使用Flask服务器为API提供服务,通过HTTP GET参数接收图像URL。
我正在使用这个非常长的url示例(在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获取的图片URL),似乎+
字符被替换为字面空格,这似乎会导致问题出现。
flask.args.get
函数有没有处理这个问题的选项?
<server>:<port>/example?imageurl=<url>
。因此我认为这必须在Flask层面完成。那么request.query_string是否合适呢? - Aly<server>:<port>/example?imageurl=<encoded-url>
。 - Martijn Pieters