Configurați atât sesiunea API autorizată a gspread, cât și transportul cererii de reînnoire a acreditărilor când oricare dintre ele are nevoie de 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)

Acesta folosește interfața Client din gspread 6 cu o sesiune furnizată și acreditările existente ale aplicației. Configurează transportul, nu permisiunile foii de calcul sau domeniile OAuth. Pentru punctele finale publice de API și de token pe o rută publică permisă, alegeți un candidat HTTP neautentificat din lista de proxy HTTP pentru harta rutelor. Păstrați ambele sesiuni lipsite de orice cont proxy reținut la schimbarea intermediarului.

AuthorizedSession adaugă acreditări cererilor API și le poate reînnoi. Fără auth_request, google-auth poate crea o altă sesiune Requests pentru acel trafic. Valorile implicite de proxy ale sesiunii autorizate nu o configurează pe cea creată independent.

Adaptorul Request de mai sus furnizează în mod deliberat acea a doua rută. Păstrați ambele sesiuni cât timp sunt folosite, apoi închideți sesiunile deținute extern la sfârșitul domeniului lor de aplicare.

Acestea sunt valori implicite Session, așa că fuziunea mediului Requests le poate afecta în continuare. Luați în calcul intrările proxy moștenite când este necesară o rută fixă.

Folosiți URL-ul eșuat pentru a distinge un refuz al foii de calcul, o provocare a proxy-ului și o defecțiune a punctului final de acreditări. Un token de acces memorat în cache poate face apelurile API reușite fără a executa deloc reînnoirea.

Articole similare