有着与这个问题的海报相同的问题:httplib2,如何设置多个cookie?
饼干看起来像这样..。
PHPSESSID=8527b5532b6018aec4159d81f69765bd; path=/; expires=Fri, 19-Feb-2010 13:52:51 GMT, id=1578; expires=Mon, 22-Feb-2010 13:37:51 GMT, password=123456; expires=Mon, 22-Feb-2010 13:37:51 GMT, sid=8527b5532b6018aec4159d81f69765bd
请注意它是如何使用逗号和分号分隔cookie的,但是cookie本身也使用逗号。
这太复杂了,我无法用正则表达式将它们正确地分开,如果有人想试一试的话,我会非常感激的!
发布于 2010-02-19 14:03:18
你试过炊事 / http.cookiejar了吗?
如果您将cookie解释为
PHPSESSID=8527b5532b6018aec4159d81f69765bd;
path=/;
expires=Fri, 19-Feb-2010 13:52:51 GMT, id=1578;
expires=Mon, 22-Feb-2010 13:37:51 GMT, password=123456;
expires=Mon, 22-Feb-2010 13:37:51 GMT, sid=8527b5532b6018aec4159d81f69765bd那么只有分号才是真正的分隔符,逗号分隔符只是因为它前面的过期日期。
如果您对到期日期不感兴趣,则可以使用1 regex筛选出过期日期。
s/expires=[^,]+,[^,]+, //g然后通过;将整个字符串分开,并将它们解析为key=value对。
发布于 2010-02-19 14:22:40
请注意它是如何使用逗号和分号分隔cookie的,但是cookie本身也使用逗号。
正如所引用的那样,歧义逗号使得字符串无法用regex或任何其他工具进行解析。那根绳子是从哪里来的?
作为一个Set-Cookie:头值,它将是完全无效的,并且不会在任何浏览器中工作。浏览器将PHPSESSID设置为会话cookie (因为过期日期格式与额外的逗号无效),而忽略其余的。必须用多个Set-Cookie头来设置多个cookie,而不是组合成一个。
编辑:好的,看起来httplib2正在使用stdlib email包来解析头来处理HTTP数据。在电子邮件中,RFC822系列标准要求具有相同名称的多个标头(例如,例如。To:地址)等效于带有逗号连接的值的单个标头。
但是,HTTP响应是显式的,而不是are 822家族标准的;这样处理它们是完全不合适的。通过使用email解析HTTP响应,httplib2似乎使自己无法正确处理任何多用途的报头,而且Set-Cookie报头经常是这样使用的。出于这个原因,我认为httplib2是完全失效的,因此建议不要使用它。
https://stackoverflow.com/questions/2296654
复制相似问题