Por predefinição, o tempo de execução do Python 2.7
usa o serviço de obtenção de URL
para processar pedidos HTTP(S) de saída, mesmo que use as bibliotecas Python urllib
, urllib2
> ou httplib
para emitir esses pedidos. A obtenção de URLs não processa pedidos da biblioteca requests
, a menos que os ative explicitamente.
O tempo de execução do Python 3 não precisa de um serviço intermediário para processar pedidos de saída. Se quiser migrar da utilização das APIs URL Fetch, mas ainda precisar de uma funcionalidade semelhante, deve migrar esses pedidos para usar uma biblioteca Python padrão, como a biblioteca requests
.
Principais diferenças entre a obtenção de URLs e as bibliotecas Python padrão
O limite de tamanho e as quotas para pedidos processados pela obtenção de URLs são diferentes do limite de tamanho e das quotas para pedidos que não são processados pela obtenção de URLs.
Com a obtenção de URLs, quando a sua app envia um pedido a outra app do App Engine, a obtenção de URLs adiciona o cabeçalho do pedido
X-Appengine-Inbound-Appid
para afirmar a identidade da app. A app que recebe o pedido pode usar a identidade para determinar se deve processar o pedido.Este cabeçalho só está disponível em pedidos enviados a partir da sua app se esta usar a API URL Fetch. O App Engine remove o cabeçalho se o adicionar a um pedido ou se um terceiro o adicionar.
Para obter informações sobre a afirmação e a validação da identidade sem usar a obtenção de URLs, consulte o artigo Migrar a identidade da app para tokens de ID OIDC.
Para ver um exemplo de como usar o cabeçalho do pedido para validar a identidade da app de chamada quando os pedidos são enviados entre apps do App Engine, consulte o exemplo de pedido do App Engine para o App Engine.
Pode usar a API URL Fetch para definir um tempo limite predefinido para todos os pedidos. A maioria das bibliotecas do Python 3, como
requests
eurllib
, define o limite de tempo predefinido comoNone
. Por isso, deve atualizar cada pedido que o seu código faz para especificar um limite de tempo.
Vista geral do processo de migração
Se a sua app usar APIs URL Fetch para fazer pedidos, atualize o código para usar uma biblioteca Python padrão. Recomendamos que especifique um limite de tempo para cada pedido.
Teste os seus pedidos de saída no servidor de desenvolvimento local.
Configure a sua app para ignorar a obtenção de URLs quando executada no App Engine.
Implemente a sua app.
Substituir as APIs URL Fetch por uma biblioteca Python
Se ainda não estiver a usar uma biblioteca Python padrão para emitir pedidos de saída, escolha uma biblioteca e adicione-a às dependências da sua app.
Por exemplo, para usar a biblioteca Requests, crie um ficheiro
requirements.txt
na mesma pasta que o ficheiroapp.yaml
e adicione a seguinte linha:requests==2.24.0
Para compatibilidade com o Python 2, recomendamos que fixe a biblioteca
requests
na versão 2.24.0. Quando implementa a sua app, o App Engine transfere todas as dependências definidas no ficheirorequirements.txt
.Para o desenvolvimento local, recomendamos que instale dependências num ambiente virtual, como o venv.
Pesquise no seu código qualquer utilização do módulo
google.appengine.api.urlfetch
e atualize o código para usar a sua biblioteca Python.
Fazer pedidos HTTPS simples
O exemplo seguinte mostra como fazer um pedido HTTPS padrão usando a biblioteca requests
:
Fazer pedidos HTTPS assíncronos
O exemplo seguinte mostra como fazer um pedido HTTPS assíncrono usando a biblioteca requests
:
Testar localmente
Se atualizou algum dos seus pedidos de saída, execute a app no servidor de desenvolvimento local e confirme que os pedidos são bem-sucedidos.
Ignorar obtenção de URL
Para impedir que a obtenção de URLs processe pedidos quando implementa a sua app no App Engine:
No ficheiro
app.yaml
, defina a variável de ambienteGAE_USE_SOCKETS_HTTPLIB
para qualquer valor. O valor pode ser qualquer valor, incluindo uma string vazia. Por exemplo:env_variables: GAE_USE_SOCKETS_HTTPLIB : ''
Se ativou a obtenção de URLs para processar pedidos enviados a partir da biblioteca
requests
, pode remover os pedidosAppEngineAdapter
da sua app.Por exemplo, remova
requests_toolbelt.adapters.appengine
do seu ficheiroappengine_config.py
erequests_toolbelt.adapters.appengine.monkeypatch()
dos seus ficheiros Python.
Tenha em atenção que, mesmo que ignore a obtenção de URLs, conforme descrito nos passos anteriores, a sua app pode continuar a usar a API URL Fetch diretamente.
Implementar a sua app
Quando tiver tudo pronto para implementar a sua app, deve:
-
Veja a página Quotas do App Engine na Google Cloud consola para confirmar que a sua app não está a fazer chamadas à API Url Fetch.
Se a app for executada sem erros, use a divisão de tráfego para aumentar gradualmente o tráfego para a app atualizada. Monitorize atentamente a app para detetar problemas antes de encaminhar mais tráfego para a app atualizada.