[英]BASE64 decoding not working when applied in google Cloud function while decoding pubsub message
我正在使用下面的 python 代码以 base64 格式对消息进行编码 > 将其发布到 pubsub > 在同一 py 文件中以 base64 格式解码消息:
pubMessage = ptp_jsonObject['restaurant']
message_bytes = str(pubMessage).encode('utf-8')
bas64_bytes = base64.b64encode(message_bytes)
print("PRINTING THE ENCODED MESSAGE")
print(bas64_bytes)
#OUTPUT: b'eydSJzogeydyZXNfaWQnOiAnMTY1MjA0MjYnfSwgJ2lkJzogJzE2NTIwNDI2JywgJ25hbWUnOiAnQnJvdGhlciBIdWJiYXJkJywgJ2xvY2FsaXR5X3ZlcmJvc2UnOiAnTm9ydGggQ2l0eSwgRHVibGluJ30='
publish_future = ptp_publisher_client.publish(ptp_topic_path, data=bas64_bytes)
result = publish_future.result()
print('Successfully published the event to pubsub')
base64_message = base64.b64decode(bas64_bytes).decode('utf-8')
print("PRINTING THE DECODED MESSAGE")
print(base64_message)
#OUTPUT: {'R': {'res_id': '16520426'}, 'id': '16520426', 'name': 'Brother Hubbard', 'locality_verbose': 'North City, Dublin'}
在 pubsub 主题中,我可以看到消息内容提到如下编码字符串:
eydSJzogeydyZXNfaWQnOiAnMTY1MjA0MjYnfSwgJ2lkJzogJzE2NTIwNDI2JywgJ25hbWUnOiAnQnJvdGhlciBIdWJiYXJkJywgJ2xvY2FsaXR5X3ZlcmJvc2UnOiAnTm9ydGggQ2l0eSwgRHVibGluJ30=
现在,我创建了一个云 function 订阅同一主题 > 以 base64 格式解码消息,并且应该打印上面打印的解码消息,但它仍然打印编码字符串,pfb 代码和结果:
import base64
import json
def hello_pubsub(event, context):
pmessage = event['data']
pubsub_message = base64.b64decode(pmessage).decode('utf-8')
print('PRINTING DECODED MESSAGE PUBSUB')
print(pubsub_message)
#OUTPUT: eydSJzogeydyZXNfaWQnOiAnMTY1MjA0MjYnfSwgJ2lkJzogJzE2NTIwNDI2JywgJ25hbWUnOiAnQnJvdGhlciBIdWJiYXJkJywgJ2xvY2FsaXR5X3ZlcmJvc2UnOiAnTm9ydGggQ2l0eSwgRHVibGluJ30=
为什么我无法从云 function 获取解码的字符串,而另一方面,在同一个 py 文件中使用相同的代码时可以正常工作?
您将需要更多调试 output。 显然,在生产中看到的event
object 与单元测试使用的事件不同。 记录更多详细信息以识别差异。 您应该能够“编写一个失败的测试”,即编写一个失败的测试,其方式与代码在生产中失败的方式相同。 有了这些,您将在更好的 position 中实施修复,该修复适用于两种环境。
验证在所有环境中都在使用相同的 python 解释器,并且它的sys.path
正在拉入相同版本的导入库。
客户端库发布方法 base64 为您对消息数据进行编码,因此您的代码对消息进行了两次编码,但只对其进行了一次解码。
尝试将您的发布代码更改为:
pubMessage = ptp_jsonObject['restaurant']
message_bytes = str(pubMessage).encode('utf-8')
publish_future = ptp_publisher_client.publish(ptp_topic_path, data=message_bytes)
result = publish_future.result()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.