我知道之前有過關于這個問題的帖子,但閱讀它們我仍然無法找到解決方案。關于這個奇怪的部分是我的應用程式已經運行了好幾個星期,然后我重置了我的服務器,我一直收到這個錯誤。
我正在使用 Waitress 來提供一個處理 webhook 的應用程式。
@app.route(f'/outbound', methods=["POST"])
def outbound():
data = request.json.get('data')
to_ = data.get('payload').get('to')
問題出在一線to_ = data.get('payload').get('to')
這個確切的代碼已經處理我的 webhook 好幾個星期了,我不明白為什么它現在才開始拋出這個錯誤。
uj5u.com熱心網友回復:
data字典沒有鍵payload或者data['payload']可能是None。
如果data字典沒有 key payload,那么可以默默地避免這樣的錯誤,
to_ = data.get('payload', {}).get('to')
或者更安全的選擇是
payload = data.get('payload')
if payload:
to_ = payload.get('to')
uj5u.com熱心網友回復:
我會添加輸入驗證。它可以防止可能導致錯誤的錯誤傳入資料。從網路安全的角度來看,建議始終驗證所有輸入資料,因為這是惡意負載注入的大門。
可能是 Waitress 框架提供了一些輸入驗證工具。一些框架可以,例如 FastAPI。
如果不是這種情況,你可以自己做。它假設 Waitress 在遇到例外時將回傳 HTTP 4xx 錯誤代碼。
@app.route(f'/outbound', methods=["POST"])
def outbound():
json = request.json
if json is None:
raise ValueError("Missing data")
try:
to_ = json["payload"]["to"]
except KeyError:
raise ValueError("Malformed payload")
data = request.json.get('data')
to_ = data.get('payload').get('to')
該解決方案仍然可以使用專用于輸入驗證的功能進行改進,最終可以成為您outbound()功能的裝飾器。
uj5u.com熱心網友回復:
所以顯然我的 webhook 提供商改變了他們發送 json 的方式,而沒有通過電子郵件或網站通知任何人。他們的檔案仍在使用舊版本。現在瀏覽所有日志以更新我的應用程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522526.html
標籤:Python烧瓶女服务员
下一篇:Flask添加自定義后臺任務
