目前靠免費公用代理抓報價,很多人共用、容易被限流而逾時,且 Yahoo 台股報價延遲約 15~20 分。
設好自備代理後,看板現價、全市場掃描預篩選與持股監控會優先改用證交所即時報價(延遲約數秒),失敗時自動退回 Yahoo。已經建過舊版 Worker 的,請把程式碼換成下面這份再 Deploy(新版允許:證交所 www.twse.com.tw、公開資訊觀測站 mopsov/mops,策略研究抓月營收、投信買賣超要用到)。自己架一個免費代理最穩:登入 Cloudflare → Workers → 建立 Worker → 貼上下面程式碼 → Deploy,再把網址貼到上面。
let ck="",ckT=0;
const CORS={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"*","Cache-Control":"no-store"};
const J=(o,st)=>new Response(JSON.stringify(o),{status:st||200,headers:{...CORS,"Content-Type":"application/json"}});
export default{async fetch(q){
if(q.method==="OPTIONS")return new Response(null,{headers:CORS});
try{
const u=new URL(q.url).searchParams.get("url")||"";
if(!/^https:\/\/(query[12]\.finance\.yahoo\.com|openapi\.twse\.com\.tw|www\.twse\.com\.tw|www\.tpex\.org\.tw|mis\.twse\.com\.tw|mopsov\.twse\.com\.tw|mops\.twse\.com\.tw)\//.test(u))return J({error:"url not allowed"},400);
const h={"User-Agent":"Mozilla/5.0","Accept":"application/json, text/html, text/plain, */*"};
if(u.includes("mis.twse.com.tw")){
h["Referer"]="https://mis.twse.com.tw/stock/index.jsp";
if(!ck||Date.now()-ckT>3e5){
const p=await fetch("https://mis.twse.com.tw/stock/index.jsp",{headers:{"User-Agent":"Mozilla/5.0"}});
const m=(p.headers.get("set-cookie")||"").match(/JSESSIONID=[^;,]+/);
ck=m?m[0]:"";ckT=Date.now();
}
if(ck)h["Cookie"]=ck;
}
const r=await fetch(u,{headers:h,cf:{cacheTtl:0}});
return new Response(r.body,{status:r.status,headers:{...CORS,"Content-Type":r.headers.get("content-type")||"application/json"}});
}catch(e){return J({error:String(e)},502)}
}}