在Python Web服务调用中合并Base64编码的数据



我正在尝试用Python 3进行web服务调用。请求的一个子集包括一个base64编码的字符串,该字符串来自Python字典列表。

所以我转储列表并对字符串进行编码:

j = json.dumps(dataDictList, indent=4, default = myconverter)
encodedData = base64.b64encode(j.encode('ASCII'))

然后,当我构建请求时,我会添加该字符串。因为它以字节为单位返回,我需要将其更改为字符串:

...
"data": "''' + str(encodedData) + '''"
...

我从web服务得到的响应是我的请求格式不正确。当我打印str(encodedData)时,我得到:

b'WOgICAgeWOgICAgICJEQVlfREFURSI6ICIyMDYLTMxIDAwOjAwIwKICAgICAgICAiQ0FMTF9DVFjfSUQiOiA1LAogICAgICJUT1RfRE9MTEFSX1NBTEVTIjogMTk5MS4wLAogICAg ICJUT1RF5JVF9TQUxFUy6IDQ0LjAsCiAgICAgICAgIlRPVF9DT1NUIjogMTYxOC4xMDM3MDAwMDAwA2LAogICAg2ICJH Uk9TU19ET0xMQVJfU0FMRVMiOiAxOTkxLjAKICAgIH0KXQ=='

如果我把它复制到base64解码器中,我就会胡言乱语,直到我删除了开头的b'和最后一个引号。我想是这些原因导致我的请求失败了。不过,根据这个注释,我认为b'被忽略了:;b';字符串文字前面的字符做什么?

如果有任何建议,我将不胜感激。

谢谢。

bytes对象传递到str会使其格式化以供显示,它不会将字节转换为字符串(您需要知道编码才能工作):

In [1]: x = b'hello'
In [2]: str(x)
Out[2]: "b'hello'"

注意,str(x)实际上以b'开始,并以'结束。如果要将字节解码为字符串,请使用bytes.decode:

In [5]: x = base64.b64encode(b'hello')
In [6]: x
Out[6]: b'aGVsbG8='
In [7]: x.decode('ascii')
Out[7]: 'aGVsbG8='

您可以安全地将base64字节解码为ASCII。此外,您的JSON应该编码为UTF-8,而不是ASCII。以下更改应该有效:

j = json.dumps(dataDictList, indent=4, default=myconverter)
encodedData = base64.b64encode(j.encode('utf-8')).decode('ascii')

相关内容

  • 没有找到相关文章

最新更新