根據預設,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 呼叫。 
- 如果應用程式順利執行,請使用流量分配,逐步增加更新版應用程式的流量。在將更多流量導向更新版應用程式前,請密切監控應用程式,確保沒有任何問題。