Настройте и авторизованную сессию API gspread, и транспорт запроса обновления учётных данных, когда любому из них нужен прокси:

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)

Здесь используется интерфейс Client из gspread 6 с переданной сессией и существующими учётными данными приложения. Настраивается транспорт, а не права на таблицу или области OAuth. Для публичных конечных точек API и токенов на разрешённом публичном маршруте выберите неаутентифицированного кандидата HTTP из списка HTTP-прокси для карты маршрутов. Держите обе сессии свободными от любого сохранённого прокси-аккаунта при смене посредника.

AuthorizedSession добавляет учётные данные к запросам API и может их обновлять. Без auth_request google-auth может создать ещё одну сессию Requests для этого трафика. Параметры прокси по умолчанию у авторизованной сессии не настраивают ту, что создана независимо.

Адаптер Request выше намеренно обеспечивает этот второй маршрут. Держите обе сессии, пока они используются, а затем закройте сессии, принадлежащие извне, в конце области их применения.

Это значения по умолчанию Session, поэтому объединение окружения Requests всё ещё может на них влиять. Учитывайте унаследованные параметры прокси, когда нужен фиксированный маршрут.

Используйте неудавшийся URL, чтобы отличить отказ таблицы, запрос прокси и сбой конечной точки учётных данных. Кэшированный токен доступа может позволить вызовам API завершиться успешно вообще без выполнения обновления.

Похожие статьи