Configure a la vez la sesión API autorizada de gspread y el transporte de la solicitud de renovación de credenciales cuando cualquiera de los dos necesite el 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)

Esto usa la interfaz Client de gspread 6 con una sesión proporcionada y las credenciales existentes de la aplicación. Configura el transporte, no los permisos de la hoja de cálculo ni los ámbitos OAuth. Para los puntos de conexión públicos de API y de token en una ruta pública permitida, elija un candidato HTTP no autenticado de la lista de proxies HTTP para el mapa de rutas. Mantenga ambas sesiones sin ninguna cuenta de proxy conservada al cambiar el intermediario.

AuthorizedSession añade credenciales a las solicitudes API y puede renovarlas. Sin auth_request, google-auth puede crear otra sesión de Requests para ese tráfico. Los valores predeterminados de proxy en la sesión autorizada no configuran la creada de forma independiente.

El adaptador Request anterior proporciona deliberadamente esa segunda ruta. Mantenga ambas sesiones mientras se usen y, después, cierre las sesiones de propiedad externa al final de su ámbito de aplicación.

Son valores predeterminados de Session, así que la fusión del entorno de Requests todavía puede afectarlos. Tenga en cuenta las entradas de proxy heredadas cuando se requiera una ruta fija.

Use la URL fallida para distinguir un rechazo de la hoja de cálculo, un desafío del proxy y un fallo del punto de conexión de credenciales. Un token de acceso en caché puede hacer que las llamadas API tengan éxito sin ejecutar la renovación en absoluto.

Artículos relacionados