docs + sni: fix README quota (20k/day not 2M) and add scholar.google.com

- README: Persian FAQ was claiming ~2 million UrlFetchApp calls/day.
  Real free-tier quota is 20,000/day (100,000 on paid Workspace) per
  https://developers.google.com/apps-script/guides/services/quotas.
  Closes #63.

- DEFAULT_GOOGLE_SNI_POOL (Rust) + DEFAULT_SNI_POOL (Android): add
  scholar.google.com. Reported in #47 as another SNI that reliably
  passes DPI on MCI / Samantel where plain *.google.com subdomains are
  selectively blocked. Same mechanism as accounts.googl.com.
This commit is contained in:
therealaleph
2026-04-23 15:34:57 +03:00
parent b90b003cbc
commit df68a84a3c
3 changed files with 9 additions and 2 deletions
+2 -2
View File
@@ -621,7 +621,7 @@ logread -e mhrv-rs -f
- **لینوکس:** فایل `/usr/local/share/ca-certificates/mhrv-rs.crt` را حذف و `sudo update-ca-certificates` اجرا کنید - **لینوکس:** فایل `/usr/local/share/ca-certificates/mhrv-rs.crt` را حذف و `sudo update-ca-certificates` اجرا کنید
**چند `Deployment ID` لازم دارم؟** **چند `Deployment ID` لازم دارم؟**
یکی برای استفادهٔ عادی کافی است. هر حساب گوگل روزانه حدود ۲ میلیون درخواست سهمیه دارد. اگر مصرف بالا دارید یا سرعت کم شده، در حساب‌های گوگل دیگر `Deployment` بسازید و همهٔ `Deployment ID`ها را در فیلد `Apps Script ID(s)` یک در هر خط وارد کنید — برنامه خودکار بینشان می‌چرخد. یکی برای استفادهٔ عادی کافی است. سهمیهٔ روزانه `UrlFetchApp` برای حساب رایگان گوگل **۲۰٬۰۰۰ درخواست در روز** است (برای `Workspace` پولی ۱۰۰٬۰۰۰)، با محدودیت پاسخ ۵۰ مگابایت به ازای هر `fetch`. برای اکثر کاربران چند ساعت یوتیوب هم با یک `Deployment` کافی است. اگر مصرف بالا دارید، در حساب‌های گوگل دیگر `Deployment` بسازید و همهٔ `Deployment ID`ها را در فیلد `Apps Script ID(s)` یک در هر خط وارد کنید — برنامه خودکار بینشان می‌چرخد. مرجع: <https://developers.google.com/apps-script/guides/services/quotas>
**یوتوب کار می‌کند؟ ویدیو پخش می‌شود؟** **یوتوب کار می‌کند؟ ویدیو پخش می‌شود؟**
صفحهٔ یوتوب سریع باز می‌شود (چون مستقیم از لبهٔ گوگل می‌آید). اما `chunk`های ویدیوی اصلی از `googlevideo.com` از طریق `Apps Script` می‌آیند و روزانه سهمیه دارند. برای تماشای گاه‌به‌گاه خوب است، برای ۱۰۸۰p پخش طولانی دردناک. صفحهٔ یوتوب سریع باز می‌شود (چون مستقیم از لبهٔ گوگل می‌آید). اما `chunk`های ویدیوی اصلی از `googlevideo.com` از طریق `Apps Script` می‌آیند و روزانه سهمیه دارند. برای تماشای گاه‌به‌گاه خوب است، برای ۱۰۸۰p پخش طولانی دردناک.
@@ -655,7 +655,7 @@ logread -e mhrv-rs -f
این محدودیت‌ها ذاتی روش `Apps Script` هستند، نه باگ این برنامه. نسخهٔ اصلی پایتون هم دقیقاً همین محدودیت‌ها را دارد. این محدودیت‌ها ذاتی روش `Apps Script` هستند، نه باگ این برنامه. نسخهٔ اصلی پایتون هم دقیقاً همین محدودیت‌ها را دارد.
- `User-Agent` همهٔ درخواست‌ها ثابت روی `Google-Apps-Script` است (گوگل اجازهٔ تغییر نمی‌دهد). بعضی سایت‌ها به‌خاطر این نسخهٔ ساده‌شدهٔ بدون `JavaScript` نشان می‌دهند - `User-Agent` همهٔ درخواست‌ها ثابت روی `Google-Apps-Script` است (گوگل اجازهٔ تغییر نمی‌دهد). بعضی سایت‌ها به‌خاطر این نسخهٔ ساده‌شدهٔ بدون `JavaScript` نشان می‌دهند
- پخش ویدیو سهمیه دارد و ممکن است کند باشد (هر حساب گوگل روزانه حدود ۲ میلیون درخواست سهمیه دارد) - پخش ویدیو سهمیه دارد و ممکن است کند باشد (سهمیهٔ `UrlFetchApp` برای حساب رایگان ۲۰٬۰۰۰ درخواست در روز است — چند ساعت یوتیوب برای بیشتر کاربران)
- فشرده‌سازی `Brotli` پشتیبانی نمی‌شود (فقط `gzip`)، سربار حجمی جزئی - فشرده‌سازی `Brotli` پشتیبانی نمی‌شود (فقط `gzip`)، سربار حجمی جزئی
- `WebSocket` از `Apps Script` عبور نمی‌کند (`ChatGPT` استریم، `Discord voice`، …) - `WebSocket` از `Apps Script` عبور نمی‌کند (`ChatGPT` استریم، `Discord voice`، …)
- سایت‌هایی که گواهی خود را `pin` کرده‌اند گواهی `MITM` برنامه را قبول نمی‌کنند (تعداد کمی‌اند) - سایت‌هایی که گواهی خود را `pin` کرده‌اند گواهی `MITM` برنامه را قبول نمی‌کنند (تعداد کمی‌اند)
@@ -289,4 +289,6 @@ val DEFAULT_SNI_POOL: List<String> = listOf(
// subdomains are selectively SNI-blocked. Must mirror the Rust list // subdomains are selectively SNI-blocked. Must mirror the Rust list
// in src/domain_fronter.rs exactly. // in src/domain_fronter.rs exactly.
"accounts.googl.com", "accounts.googl.com",
// Issue #47: same DPI-passing behaviour on MCI / Samantel.
"scholar.google.com",
) )
+5
View File
@@ -1089,6 +1089,11 @@ pub const DEFAULT_GOOGLE_SNI_POOL: &[&str] = &[
// use: we never actually HTTP-to it, just present it in the TLS // use: we never actually HTTP-to it, just present it in the TLS
// handshake. // handshake.
"accounts.googl.com", "accounts.googl.com",
// scholar.google.com — same logic as accounts.googl.com, reported
// in #47 as a DPI-passing SNI on MCI / Samantel. Covered by the
// core *.google.com cert so it handshakes normally against
// google_ip:443.
"scholar.google.com",
]; ];
/// Build the pool of SNI hosts used for outbound connections to the Google /// Build the pool of SNI hosts used for outbound connections to the Google