Roteamento de proxy no gspread 6 para chamadas de API e renovação de tokens
Dê ao gspread uma sessão autorizada ciente do proxy e configure o transporte separado usado para renovar as credenciais do Google.
Configure tanto a sessão de API autorizada do gspread quanto o transporte da solicitação de renovação de credenciais quando qualquer um deles precisar do proxy:
import requests
import gspread
from google.auth.transport.requests import AuthorizedSession, Request
routes = {
'http': 'http://proxy.example:8080',
'https': 'http://proxy.example:8080',
}
token_session = requests.Session()
token_session.proxies.update(routes)
session = AuthorizedSession(
credentials,
auth_request=Request(session=token_session),
)
session.proxies.update(routes)
client = gspread.Client(auth=credentials, session=session)Isto usa a interface Client do gspread 6 com uma sessão fornecida e as credenciais existentes da aplicação. Configura transporte, não permissões da planilha nem escopos OAuth. Para endpoints públicos de API e de token numa rota pública permitida, escolha um candidato HTTP não autenticado da lista de proxies HTTP para o mapa de rotas. Mantenha ambas as sessões livres de qualquer conta de proxy retida ao trocar o intermediário.
AuthorizedSession adiciona credenciais às solicitações de API e pode renová-las. Sem auth_request, o google-auth pode criar outra sessão Requests para esse tráfego. Os padrões de proxy na sessão autorizada não configuram a criada de forma independente.
O adaptador Request acima fornece deliberadamente essa segunda rota. Mantenha as duas sessões durante o uso e depois feche as sessões de propriedade externa ao final do escopo da aplicação.
São padrões de Session, então a fusão de ambiente do Requests ainda pode afetá-las. Considere as entradas de proxy herdadas quando uma rota fixa for necessária.
Use a URL que falhou para distinguir uma recusa da planilha, um desafio do proxy e uma falha do endpoint de credenciais. Um token de acesso em cache pode fazer as chamadas de API terem sucesso sem executar nenhuma renovação.