簡體   English   中英

BASE64 在解碼 pubsub 消息時在谷歌雲 function 中應用時解碼不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM