Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶:Flask.request.args.get replacement'+';url中有空格_Python_Flask_Asp.net Web Api - Fatal编程技术网

Python 烧瓶:Flask.request.args.get replacement'+';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服务器作为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(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=