如何在Google Apps Script WebApp的doGet(e)中获取请求的Cookie?
我太懂你这种困惑了——之前我也试过直接打印doGet(e)里的e对象,结果啥Cookie信息都看不到,一度以为Google Apps Script根本不支持获取Cookie!其实是我们找错地方了,e对象本身确实不会暴露请求头和Cookie这些内容,得用另一个方法才行。
解决方法:用ScriptApp.getRequest()获取完整请求信息
Google Apps Script提供了ScriptApp.getRequest()方法,它能返回包含所有请求细节的对象,其中就包括我们要的请求头(自然也包含Cookie)。
直接给你改好的测试代码,替换掉你原来的doGet函数就行:
function doGet(e) { // 获取完整的请求对象 const fullRequest = ScriptApp.getRequest(); // 从请求头里取出Cookie字符串 const cookieHeader = fullRequest.headers.Cookie; // 如果需要把Cookie字符串解析成键值对,还可以加个小函数 function parseCookieString(cookieStr) { if (!cookieStr) return {}; return cookieStr.split(';').reduce((result, cookie) => { const [key, value] = cookie.trim().split('='); result[key] = value; return result; }, {}); } const parsedCookies = parseCookieString(cookieHeader); // 返回结果看看 return ContentService.createTextOutput(JSON.stringify({ rawCookie: cookieHeader, parsedCookies: parsedCookies, allRequestHeaders: fullRequest.headers })).setMimeType(ContentService.MimeType.JSON); }
测试一下
你再用之前的curl命令测试:
curl -L --cookie "name=Jane;age=25" "$webapp_endpoint"
这次返回的结果里,就能看到rawCookie和解析后的parsedCookies了!
注意事项
- 不管你是用
curl --cookie还是浏览器fetch发送的请求,只要请求里带了Cookie,fullRequest.headers.Cookie都能拿到,包括HttpOnly Cookie(毕竟HttpOnly只是限制前端JS读取,不影响请求自动带上Cookie,服务端也能正常接收)。 - 部署Web App的时候,不用特意改什么权限设置,只要你的请求能正常访问到Web App,这个方法就管用。
内容来源于stack exchange
相关产品推荐
相关产品推荐

