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.

Artigos relacionados