Enrutamento de proxy de gspread 6 para chamadas API e renovación de tokens
Dalle a gspread unha sesión autorizada que entende o proxy e configura o transporte separado que renova as credenciais de Google.
Configure á vez a sesión API autorizada de gspread e o transporte da solicitude de renovación de credenciais cando calquera dos dous necesite o 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 de gspread 6 cunha sesión fornecida e as credenciais existentes da aplicación. Configura o transporte, non os permisos da folla de cálculo nin os ámbitos OAuth. Para os puntos de conexión públicos de API e de token nunha ruta pública permitida, escolle un candidato HTTP non autenticado da lista de proxies HTTP para o mapa de rutas. Mantén ambas as sesións sen ningunha conta de proxy conservada ao cambiar o intermediario.
AuthorizedSession engade credenciais ás solicitudes API e pode renovalas. Sen auth_request, google-auth pode crear outra sesión de Requests para ese tráfico. Os valores predeterminados de proxy na sesión autorizada non configuran a creada de forma independente.
O adaptador Request anterior fornece deliberadamente esa segunda ruta. Mantén ambas as sesións mentres se usen e despois pecha as sesións de propiedade externa ao final do seu ámbito de aplicación.
Son valores predeterminados de Session, así que a fusión da contorna de Requests aínda pode afectalos. Ten en conta as entradas de proxy herdadas cando se require unha ruta fixa.
Usa o URL fallido para distinguir un rexeitamento da folla de cálculo, un desafío do proxy e un fallo do punto de conexión de credenciais. Un token de acceso na caché pode facer que as chamadas API teñan éxito sen executar a renovación en absoluto.