我有一個 python 程式碼來呼叫圖形 api 並瀏覽共享點上的目錄。該目錄有 120gb 的文件,需要數小時才能掃描。但是,我觀察到該腳本僅顯示為在 visual studio 程式碼上運行,並且沒有進一步執行。我在循環中列印檔案名,一小時後它停止輸入檔案名稱。
是因為 token 一小時後就過期了?如果是,為什麼我沒有收到指示令牌無效的錯誤?
# Define imports import requests # Copy access_token and specify the MS Graph API endpoint you want to call, e.g. 'https://graph.microsoft.com/v1.0/groups' to get all groups in your organization #access_token = '{ACCESS TOKEN YOU ACQUIRED PREVIOUSLY}' url = "[URL TO THE SHAREPOINT]" headers = { 'Authorization': access_token } consentfilecount=0 clientreportcount = 0 graphlinkcount = 0 while True:# #print(graph_result.json()['@odata.nextLink']) graph_result = requests.get(url=url, headers=headers) if ('value' in graph_result.json()): for list in graph_result.json()['value']: if(("Client Consent Form").lower() in list["name"].lower()): consentfilecount +=1 print(list["name"]) if(("Final Client Report").lower() in list["name"].lower()): clientreportcount +=1 print(list["name"]) #print(graph_result.json()) if('@odata.nextLink' in graph_result.json()): url = graph_result.json()['@odata.nextLink'] graphlinkcount += 1 else: break print(consentfilecount)
您所描述的行為幾乎可以肯定是由於您似乎使用的不記名令牌確實僅在一個小時左右有效。
預設情況下,requests
does not raise exceptions based solely on HTTP status codes 允許開發人員選擇他們想要如何處理此類情況。在您的情況下,您的 while true:
迴圈只是繼續運行,成功解析從錯誤回應傳回的 json 結構,但從未真正滿足區塊內的任何條件。
如果您確實希望腳本在不成功的 http 回應程式碼上引發異常,您可以新增對 raise_for_status()
的呼叫:
graph_result = requests.get(url=url, headers=headers) graph_result.raise_for_status()
但是,如果您的程式碼預計正常運行時間超過令牌的有效期,您可能應該在程式碼中使用正確的 oauth 刷新流程,以防止此類錯誤。
以上是Azure 不記名令牌生命週期的詳細內容。更多資訊請關注PHP中文網其他相關文章!