我尝试在Python中使用正则表达式解析set-cookie标头。 对于 set-cookie 标头,我阅读了 RFC 6265 第 4.1 节,其中描述了如何构建 set-cookie 标头。 我尝试从规范构建正则表达式,这是我当前的状态:
([x21x23-x27x2Ax2Bx2D-x39x41-x5Ax5E-x7Ax7Cx7E]+)=[x21x23-x2Bx2D-x3Ax3C-x5Bx5D-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-x3Ax3C-x7E]+)|(Secure|secure)|(HttpOnly|httponly)|([x20-x3Ax3C-x7E]*)))*
我对 set-cookie 标头 (domain=...
( 中子域的递归定义有问题,该定义在 RFC 1034 第 3.5 节中描述,需要帮助在正则表达式中构建它。
而且我以前的代码工作也没有完全预期。例如这个设置饼干标头
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 个饼干(VISITOR_INFO1_LIVE
两次,GPS
和YSC
个(,但我的正则表达式只捕获 3 个饼干(缺少YSC
饼干(。我在 https://regex101.com/上测试了这一点
稍后我会解析许多设置cookie标头以获取cookie的名称(或在RFC中调用该cookie名称(。
感谢您的帮助!
简短的回答,正如您询问如何使用正则表达式解析cookie:
([^;]+);?
然后循环访问匹配项。
您提出问题的方式表明您还想验证 cookie,并且可能还想将它们分开。
在这个问题上花了一些时间之后,我认为仅使用正则表达式几乎不可能实现您想要的目标。
每个 Cookie 没有唯一标识符或分隔符。分隔符在列内以及 Cookie 之间使用。也没有固定的列数或强制性的最后一列。很难写出这个表达式的负部分(不匹配的内容(。