根據預設,Python 2.7 執行階段會使用網址擷取服務處理傳出 HTTP(S) 要求,即使您使用 urllib、urllib2 或 httplib Python 程式庫發出這些要求也一樣。除非您明確啟用,否則網址擷取服務不會處理來自 requests 程式庫的要求。
Python 3 執行階段不需要中介服務來處理輸出要求。如果您想停用 URL Fetch API,但仍需要類似功能,請將這些要求遷移至標準 Python 程式庫,例如 requests 程式庫。
網址擷取和標準 Python 程式庫的主要差異
使用網址擷取服務時,應用程式傳送要求至其他 App Engine 應用程式時,網址擷取服務會新增
X-Appengine-Inbound-Appid要求標頭,以確認應用程式的身分。接收要求的應用程式可以使用身分識別資訊,判斷是否應處理要求。只有在應用程式使用網址擷取服務時,從應用程式傳送的要求才會包含這個標頭。如果您或第三方將標頭新增至要求,App Engine 會移除該標頭。
如要瞭解如何在不使用網址擷取服務的情況下,聲明及驗證身分,請參閱「將 App Identity 遷移至 OIDC ID 權杖」。
如要瞭解如何使用要求標頭,在 App Engine 應用程式之間傳送要求時驗證呼叫應用程式的身分,請參閱 App Engine 對 App Engine 要求範例。
您可以使用 URL Fetch 為所有要求設定預設逾時時間。大多數 Python 3 程式庫 (例如
requests和urllib) 會將預設逾時時間設為None,因此您應更新程式碼發出的每個要求,指定逾時時間。
轉換程序總覽
如果應用程式使用 URL Fetch API 發出要求,請更新程式碼,改用標準 Python 程式庫。建議您為每項要求指定逾時時間。
在本機開發伺服器中測試外送要求。
將應用程式設定為在 App Engine 中執行時略過網址擷取。
部署應用程式。
以 Python 程式庫取代 URL Fetch API
如果您尚未透過標準 Python 程式庫發出外送要求,請選擇程式庫並新增至應用程式的依附元件。
舉例來說,如要使用 Requests 程式庫,請在與
app.yaml檔案相同的資料夾中建立requirements.txt檔案,然後加入下列程式碼:requests==2.24.0如要與 Python 2 相容,建議您將
requests程式庫固定為 2.24.0 版。部署應用程式時,App Engine 會下載requirements.txt檔案中定義的所有依附元件。在本機開發時,建議您在虛擬環境 (例如 venv) 中安裝依附元件。
在程式碼中搜尋
google.appengine.api.urlfetch模組的使用情形,並更新程式碼以使用 Python 程式庫。
發出簡單的 HTTPS 要求
以下範例說明如何使用 requests 程式庫發出標準 HTTPS 要求:
發出非同步 HTTPS 要求
以下範例說明如何使用 requests 程式庫發出非同步 HTTPS 要求:
在本機測試
如果您更新了任何外送要求,請在本機開發伺服器中執行應用程式,並確認要求成功。
略過網址擷取
將應用程式部署至 App Engine 時,如要停止網址擷取服務處理要求,請按照下列步驟操作:
在
app.yaml檔案中,將GAE_USE_SOCKETS_HTTPLIB環境變數設為任何值。此值可為包括空白字串在內的任何值。 例如:env_variables: GAE_USE_SOCKETS_HTTPLIB : ''如果您已啟用網址擷取功能,處理從
requests程式庫傳送的要求,可以從應用程式中移除要求AppEngineAdapter。舉例來說,從
appengine_config.py檔案中移除requests_toolbelt.adapters.appengine,並從 Python 檔案中移除requests_toolbelt.adapters.appengine.monkeypatch()。
請注意,即使您如先前步驟所述略過 URL Fetch,應用程式仍可直接使用 URL Fetch API。
部署您的應用程式
準備好部署應用程式後,請按照下列步驟操作:
-
在 Google Cloud 控制台中查看 App Engine 配額頁面,確認應用程式未發出 URL 擷取 API 呼叫。
如果應用程式順利執行,請使用流量分配,逐步增加更新版應用程式的流量。在將更多流量導向更新版應用程式前,請密切監控應用程式,確保沒有任何問題。