用于解析 set-cookie headers 的正则表达式

Regex for parsing set-cookie headers

我尝试在 Python 中用正则表达式解析 set-cookie headers。 对于 set-cookie header,我阅读了描述如何构建 set-cookie header 的 RFC 6265 Section 4.1。 我尝试根据规范构建正则表达式,这是我当前的状态:

([\x21\x23-\x27\x2A\x2B\x2D-\x39\x41-\x5A\x5E-\x7A\x7C\x7E]+)=[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]*(;[\x20](((Expires|expires)=(Mon|Tue|Wed|Thu|Fri|Sat|Sun),[\x20][0-9]{2}-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-9]{4}[\x20][0-9]{2}:[0-9]{2}:[0-9]{2}[\x20]GMT)|((Max-Age|max-age)=[1-9]+)|((Path|path)=[\x20-\x3A\x3C-\x7E]+)|(Secure|secure)|(HttpOnly|httponly)|([\x20-\x3A\x3C-\x7E]*)))*

我对 set-cookie header (domain=...) 中子域的递归定义有问题,它在 RFC 1034 Section 3.5 中描述并且需要帮助来构建它正则表达式。

但我之前的代码也完全没有达到预期效果。例如这个 set-cookie header

VISITOR_INFO1_LIVE=M_6WYFFF_fo; path=/; domain=.youtube.com; secure; expires=Tue, 07-Jul-2020 00:17:35 GMT; httponly; samesite=None, GPS=1; path=/; domain=.youtube.com; expires=Thu, 09-Jan-2020 00:47:35 GMT, YSC=8sXes3YfFFF; path=/; domain=.youtube.com; httponly, VISITOR_INFO1_LIVE=M_6WYFFF_fo; path=/; domain=.youtube.com; secure; expires=Tue, 07-Jul-2020 00:17:35 GMT; httponly; samesite=None

包括 4 个 cookie(VISITOR_INFO1_LIVE 两次,GPSYSC)但我的正则表达式只捕获 3 个 cookie(YSC cookie 丢失)。我在 https://regex101.com/

上测试

稍后我将解析许多 set-cookie header 以获取 cookie 的名称(或在 RFC 调用中 cookie-name)。

感谢帮助!

简短回答,如您询问如何使用正则表达式解析 cookie:

([^;]+);?

然后循环匹配。

您提出问题的方式表明您还想验证 cookie 并可能将它们分开。

在这个问题上花了更多时间后,我认为仅使用正则表达式几乎不可能实现你想要的。

每个 cookie 都没有唯一的标识符或分隔符。分隔符用于列内以及 cookie 之间。也没有固定的列数或强制性的最后一列。这个表达式的负数部分很难写(what not to match)。