Google Apps Script中如何从Set-Cookie头提取hms_sid的Cookie值
问题场景
开发中解析HTTP响应头JSON对象时,Set-Cookie字段为存储多条Cookie规则的数组,需要从中提取hms_sid对应的Cookie值,示例响应头结构如下:
const allHeaders = {"Strict-Transport-Security":"max-age=31536000","Timing-Allow-Origin":"*","s_ip":"1.5.295.221","Server":"Asia","Vary":"Accept-Encoding","x-application-context":"shop-buyer-s.7001","s_group":"buyer-sessio","Content-Language":"zh-CN","Access-Control-Allow-Headers":"Origin, x-ua, x-umidtoken, x-csrf-token, X-Requested-With, Content-Type, Accept","Set-Cookie":["hms_cid=80dcf576-a581-4d43-8302-1605fe36565c; Domain=.hms.zn; Expires=Sun, 09-Jul-2023 04:39:13 GMT; Path=/","hms_sid=112120422020a413958ddf33139b516b; Domain=.hms.zn; Path=/; HttpOnly","_tb_token_=e8eafb9bebe63; Domain=.hms.zn; Path=/; HttpOnly"],"Transfer-Encoding":"chunked","object-status":"ttl=2592000,age=42,gip=121.43.99.68","Connection":["keep-alive","Transfer-Encoding"],"s_tag":"285873024335988|0^|^^","s_tid":"21410a7016573415536295456ef332","eagleeye-traceid":"21410a7016573415536295456ef332","s_v":"4.0.2.0","Content-Encoding":"gzip","P3P":"CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'","Date":"Sat, 09 Jul 2022 04:39:13 GMT","Access-Control-Max-Age":"3600","s_ucode":"Asia:CENTER","Access-Control-Allow-Methods":"POST, GET, OPTIONS, DELETE","Content-Type":"text/html;charset=UTF-8","s_status":"STATUS_NOT_EXISTED"}
目标提取值为112120422020a413958ddf33139b516b。
实现代码
直接遍历Set-Cookie数组,按Cookie格式规则拆分匹配即可,代码可直接在Google Apps Script环境运行:
const cookieList = allHeaders['Set-Cookie']; let targetSid = ''; for (const cookie of cookieList) { // 单条Cookie格式为 键=值;属性1;属性2,先拆分出最前面的键值对 const [corePair] = cookie.split(';'); const [name, value] = corePair.split('='); if (name.trim() === 'hms_sid') { targetSid = value; break; } } // 最终得到hms_sid对应的值 console.log(targetSid);
逻辑说明
- 你已经完成第一步:通过
allHeaders['Set-Cookie']拿到了存储所有Cookie条目的数组 - 单条Cookie字符串的固定格式为
Cookie名=Cookie值后接分号分隔的域名、过期时间、路径等属性,因此第一个分号前的内容就是核心键值对 - 拆分键值对后匹配名称为
hms_sid的条目,取出对应的值即可,trim()用于处理可能存在的多余空格,避免匹配失败 - 匹配到目标值后直接终止遍历,减少不必要的循环计算
内容的提问来源于stack exchange,提问作者Hey You
相关产品推荐
相关产品推荐

