ChatGPT API 呼叫逾時,不一定代表 API 服務故障,也不一定能靠切換 VPN 線路解決。請先分清楚問題發生在 DNS 解析、TCP 連線、TLS 交握、等待 API 回應,還是應用程式收到回應後的處理階段。網頁版與 API 使用的請求路徑、登入狀態及用量計費方式不同;網頁能正常開啟,不能單獨證明程式所在環境也能連到 API。

本文整理一套由外而內的排查流程:先確認官方服務資訊與帳戶狀態,再檢查用戶端路由、DNS、代理環境變數及逾時設定。VPN 可以改變程式流量經過的網路路徑,但不保證特定 API 一定可用,也不能取代對服務供應地區、使用條款與帳戶資格的確認。

先判斷逾時發生在哪個階段

「逾時」只是程式呈現的結果,不是根因。不同階段失敗,應採取的處理方式也不同。DNS 查詢失敗時,程式可能還沒連上伺服器;TCP 或 TLS 階段沒有完成,通常要檢查路由、防火牆、代理及系統時間;連線已建立但遲遲沒有回應,則要再看 API 服務狀態、請求內容、帳戶限制與程式設定。

DNS

網域名稱解析

TCP

建立傳輸連線

TLS

建立加密連線

HTTP

取得 API 回應

先保存完整錯誤內容,不要只記下介面上的「Request timed out」。留意日誌是否指出名稱解析錯誤、連線遭拒、TLS 憑證驗證失敗、讀取逾時,或收到 HTTP 狀態碼。若請求已取得 HTTP 回應,代表至少有一部分網路流程完成;此時應檢查回應本文、請求參數、授權狀態及用量,而不是一律更換 VPN 節點。

用同一個請求比較網路狀態

在允許使用 API 的網路及帳戶環境中,先使用相同程式、相同 API 金鑰與相同請求測試。接著只切換 VPN 連線狀態,再重複測試並比較錯誤階段。若 VPN 開啟後 DNS 或 TLS 才失敗,應檢查用戶端的 DNS、分流和代理設定;若兩種狀態都在收到回應後出現相同錯誤,則應優先查看 API 回應內容及帳戶設定。

網頁版和 API 不宜當成完全相同的測試目標。網頁版通常經由瀏覽器登入流程與網站前端,API 則由程式向 API 網域發出 HTTPS 請求,並使用 API 金鑰等授權方式。兩者在網路出口、瀏覽器代理、應用程式代理變數、帳戶權限與計費設定上都可能不同。因此,瀏覽器可以登入,只能說明該瀏覽器當時能使用網頁服務,不能證明命令列或伺服器程式的 API 請求也走同一條路徑。

檢查 VPN 路由、分流與 DNS

連線 VPN 後,先確認負責呼叫 API 的那個程序是否真的經過 VPN。桌面用戶端若啟用規則分流,瀏覽器可能走代理,但終端機、IDE、容器或背景服務仍走直連;也可能相反,只有部分網域被送進隧道。應檢查目前模式、規則命中結果與應用程式代理設定,並確認 API 網域沒有被誤設為直連或送往不相容的出口。

接著檢查 DNS。用戶端可能使用系統 DNS、隧道內 DNS 或自訂 DNS;不同解析路徑會造成同一網域在不同網路狀態下解析結果不同。不要只憑 IP 位址差異就判定遭到攔截,也不要把查到的單一 IP 寫死在程式中。服務端位址可能調整,固定 IP 會讓憑證驗證、負載平衡或後續連線出現問題。較穩妥的做法是確認網域名稱可正常解析,並讓 HTTPS 憑證驗證保持啟用。

若程式使用 HTTP 代理,請確認代理設定與 VPN 用戶端的接管方式沒有互相衝突。部分程式會讀取 HTTPS_PROXY、HTTP_PROXY 或 NO_PROXY 等環境變數;瀏覽器的代理設定不一定會自動套用到這些程序。切換網路後,重新啟動終端機、IDE、容器或服務程序,避免它們繼續使用舊的環境變數或連線池。

觀察到的現象 優先檢查 建議處理方式
網域名稱無法解析 DNS 設定、分流規則、系統 DNS 快取 確認 API 網域由預期的 DNS 路徑解析,再重啟程式測試
連線或 TLS 交握失敗 代理環境變數、系統時間、憑證檢查、防火牆 核對代理出口與系統時間,不要停用憑證驗證來掩蓋錯誤
瀏覽器正常,命令列逾時 終端機是否走 VPN、命令列代理、容器網路 在實際執行 API 的環境中檢查路由與代理設定
VPN 開啟後才出現問題 分流規則、DNS 模式、出口連線品質 一次只調整一項設定,使用相同請求重測並保留日誌
取得 API 錯誤回應 授權、請求格式、帳戶用量及服務狀態 依回應本文與官方說明處理,不要把所有 HTTP 錯誤都視為網路逾時

確認 API 請求、金鑰與帳戶狀態

請求格式錯誤、金鑰無效或帳戶用量受限,通常與 VPN 線路無關。先確認程式呼叫的是官方文件所列的 API 端點、使用的模型與參數目前仍受支援,並檢查請求本文是否符合該端點的格式。API 版本、模型名稱與功能可能變動,請以官方文件及帳戶控制檯顯示為準,不要直接複製很久以前的範例。

以下命令可作為 HTTPS 請求的基本檢查方式。請先在本機環境安全地設定 OPENAI_API_KEY,再執行測試;將模型欄位替換為帳戶可用且符合官方文件的值。命令列輸出可能包含請求與回應資訊,分享日誌前務必移除授權標頭、金鑰、個人資料及其他敏感內容。

curl -v https://api.openai.com/v1/responses \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"替換為可用模型","input":"連線測試"}'

檢查結果時,分辨「沒有收到 HTTP 回應」與「收到錯誤回應」很重要。若有 HTTP 狀態碼及回應本文,請先依官方文件解讀授權、參數、額度或速率限制相關訊息;若請求卡在連線或讀取階段,再回到網路路由與逾時設定排查。也要確認使用的金鑰屬於正確的專案或帳戶,且該帳戶的 API 用量與付款設定正常。ChatGPT 網頁版的方案狀態與 API 用量計費並非同一件事,不應只根據網頁版是否能使用來推斷 API 權限或餘額。

API 金鑰應放在環境變數或受控的密鑰管理工具中,不要寫進前端程式、公開程式碼、截圖或錯誤回報。若金鑰曾貼到公開位置,應依官方流程撤銷並更換,再檢查帳戶用量。除非確定是安全測試環境,也不要在除錯時把授權標頭完整輸出到可被其他人讀取的日誌。

調整逾時、重試與串流處理

應用程式的逾時通常至少涉及建立連線與等待回應兩類設定。連線逾時過短,可能在 DNS、TCP 或 TLS 尚未完成時就中止;讀取逾時過短,則可能在 API 正常處理較長請求期間提前放棄。不同語言、SDK 與 HTTP 用戶端的選項名稱不一致,應查閱目前所用版本的文件,並把逾時設定放在呼叫 API 的那一層,而不是隻調整瀏覽器或 VPN 用戶端。

不要把逾時無限制拉長作為唯一處理方式。過長的等待會讓工作程序、連線池或使用者介面長時間被佔用,也可能掩蓋網路故障。先根據應用程式的使用情境設定合理的連線與讀取期限,再記錄每次呼叫開始、連線完成、收到首段資料及結束的時間點。這些紀錄能幫助判斷延遲出現在網路建立、模型處理或回應下載階段。

重試時採取有上限的退避策略,並加入隨機抖動,避免大量請求在同一時間集中重送。對於暫時性網路錯誤或官方文件指出可重試的回應,可以在確認請求語意安全後重試;對於金鑰無效、參數錯誤或帳戶用量問題,重試通常不會修復根因。若請求可能已在服務端完成,但用戶端只是沒有收到回應,不要盲目重送可能產生重複副作用的操作;應先依端點支援方式處理請求識別與結果確認。

使用串流回應時,應區分「尚未收到第一段資料」與「串流途中中斷」。前者可能與連線路徑、服務端等待或讀取期限有關;後者還要檢查代理是否允許長時間連線、應用程式是否正確讀取事件串流,以及中間層是否提早關閉閒置連線。除錯期間可先使用非串流請求縮小問題範圍,再恢復串流模式逐項確認。

依序排查,避免把問題越改越複雜

測試時最好固定裝置、程式版本、請求內容與帳戶,只改變一個網路條件。先檢查官方服務狀態與使用地區資訊,再確認帳戶、金鑰及用量;接著在實際執行程式的環境中測試 DNS 與 HTTPS;最後才比較 VPN 開啟、關閉或不同分流設定的結果。若同時更換 VPN 線路、DNS、代理變數與 SDK 版本,即使問題消失,也很難知道真正原因。

  • ✅ 以官方資訊確認 API 的服務狀態、支援地區與使用要求
  • ✅ 保存錯誤階段、HTTP 回應及程式版本等必要診斷資訊
  • ✅ 在命令列、容器或伺服器等實際執行環境檢查代理與路由
  • ✅ VPN 每次只切換一項設定,並用相同請求進行比較
  • ✅ 依 SDK 文件分別設定連線與讀取逾時,避免無限制等待
  • ❌ 不要停用 TLS 憑證驗證或把 API 金鑰貼到公開除錯工具
  • ❌ 不要把網頁版可登入,當成 API 權限、計費或連線正常的證明
  • ❌ 不要用反覆重試取代對帳戶錯誤、請求格式與服務狀態的確認

如需切換線路作為診斷手段,應以穩定、符合所在地與服務規範的網路環境為前提。VPN 可能改善特定網路下的路由,也可能因 DNS、代理出口或傳輸限制增加新的變數;它不能保證解除服務限制,也不能替代官方支援地區與使用條款。若官方服務狀態正常、基本 HTTPS 連線可建立,但特定帳戶仍收到授權或用量錯誤,應依官方帳戶與 API 文件處理。

排查結論:先定位逾時階段,再核對帳戶與 API 請求,最後比較程式實際使用的 VPN 路由、DNS 和代理設定。用同一請求逐項測試,比單純更換線路或提高逾時更容易找到真正原因。