0

我尝试在 Python 中使用正则表达式解析 set-cookie 标头。对于 set-cookie 标头,我阅读了描述如何构建 set-cookie 标头的RFC 6265 第 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]*)))*

domain=...我在set-cookie 标

但我之前的代码工作也完全没有预料到。例如这个 set-cookie 标头

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 标头以获取 cookie 的名称(或在 RFC 中调用该 cookie 名称)。

感谢帮助!

4

2 回答 2

1

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

([^;]+);?

然后遍历匹配项。

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

于 2020-01-10T18:21:45.283 回答
1

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

每个 cookie 没有唯一标识符或分隔符。分隔符用于列内以及 cookie 之间。也没有固定的列数或强制性的最后一列。很难写出这个表达式的否定部分(什么不匹配)。

于 2020-01-10T19:45:38.137 回答