การกำหนดเส้นทางพร็อกซีของ gspread 6 สำหรับการเรียก API และการรีเฟรชโทเคน
มอบเซสชันที่ได้รับอนุญาตซึ่งรับรู้พร็อกซีให้ gspread และกำหนดค่าการขนส่งแยกที่ใช้รีเฟรชข้อมูลรับรองของ Google
กำหนดทั้งเซสชัน 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 สำเร็จโดยไม่ต้องรีเฟรชเลย