Configurate sia la sessione API autorizzata di gspread sia il trasporto della richiesta di rinnovo delle credenziali quando uno dei due necessita del 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)

Questo codice usa l'interfaccia Client di gspread 6 con una sessione fornita e le credenziali esistenti dell'applicazione. Configura il trasporto, non i permessi del foglio di calcolo o gli ambiti OAuth. Per gli endpoint pubblici di API e token su una rotta pubblica consentita, scegliete un candidato HTTP non autenticato dall'elenco di proxy HTTP per la mappa delle rotte. Tenete entrambe le sessioni prive di qualsiasi account proxy conservato quando cambiate l'intermediario.

AuthorizedSession aggiunge le credenziali alle richieste API e può rinnovarle. Senza auth_request, google-auth può creare un'altra sessione Requests per quel traffico. I valori predefiniti del proxy sulla sessione autorizzata non configurano quella creata in modo indipendente.

L'adattatore Request qui sopra fornisce deliberatamente quella seconda rotta. Mantenete entrambe le sessioni durante l'uso, poi chiudete le sessioni di proprietà esterna alla fine del loro ambito applicativo.

Sono valori predefiniti di Session, quindi l'unione dell'ambiente di Requests può ancora influenzarli. Tenete conto degli input proxy ereditati quando serve una rotta fissa.

Usate l'URL non riuscito per distinguere un rifiuto del foglio di calcolo, una richiesta di autenticazione del proxy e un guasto dell'endpoint delle credenziali. Un token di accesso in cache può far riuscire le chiamate API senza eseguire alcun rinnovo.

Articoli correlati