[issue34951] cookielib/cookiejar cookies' Expires date parse fails with long month names
New submission from Alberto Moral : http.cookiejar (cookielib, for python2.*) does not parse some cookies' Expires date. For example: "Friday, 1-August-1997 00:00:00 GMT" does not work (while: "Fri, 01 Aug 1997 00:00:00 GMT" works fine) This is basically due to long names of months (it is compared with MONTHS_LOWER: list of 3-letter months). So, I propose a small change in the definition of LOOSE_HTTP_DATE_RE (see fifth line): LOOSE_HTTP_DATE_RE = re.compile( r"""^ (\d\d?)# day (?:\s+|[-\/]) (\w{3})\w* # month (3 first letters only) ... Instead of: LOOSE_HTTP_DATE_RE = re.compile( r"""^ (\d\d?)# day (?:\s+|[-\/]) (\w+) # month ... I've tested only http.cookiejar (python 3.6), but I suposse the same change will work on cookielib Thanks in advance -- components: Library (Lib) messages: 327461 nosy: alb_moral priority: normal severity: normal status: open title: cookielib/cookiejar cookies' Expires date parse fails with long month names type: behavior versions: Python 2.7, Python 3.6 ___ Python tracker <https://bugs.python.org/issue34951> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue34951] cookielib/cookiejar cookies' Expires date parse fails with long month names
Alberto Moral added the comment: Thanks for your answer. I have not found any RFCs with full month names either. I'm afraid I'm not an expert here. But the case is that I get them in my work. Here is an example of response header: HTTP/1.1 200 OK Server: Oracle-iPlanet-Web-Server/7.0 Date: Tue, 10 Oct 2018 14:29:44 GMT Version-auth-credencial: v.3.0.1 Iplanet - Sun Solaris - Contexto Multiple Set-cookie: JSESSIONIDE=Del; expires=Friday, 1-August-1997 00:00:00 GMT; domain=... I do not know if it's an old date format (?)... or if it is a quite rare case... I have created some previous bash scripts using wget and they work fine, but I have had problems with python3 (and requests module) till I realized this issue. And it was not very easy: I am very new with python :( That's the reason of my proposal. It's just to be coherent: if we compare 3 letters of a month with MONTHS_LOWER, let's use just 3 (first) letters. Perhaps modifying LOOSE_HTTP_DATE_RE is not a good idea. Another option could be to truncate the month variable (mon). It could be done inside the _str2time funtion, for example: def _str2time(day, mon, yr, hr, min, sec, tz): mon = mon[:3] # assure 3 letters yr = int(yr) Anyway, I'll try to find why those long month names appear. Thank you -- ___ Python tracker <https://bugs.python.org/issue34951> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue34951] cookielib/cookiejar cookies' Expires date parse fails with long month names
Alberto Moral added the comment: Yes, I was thinking that it could be a matter of configuration of the server (?). By the way, and just for fun, I've just realized that truncating mon at the begining of the _str2time funtion is a very bad idea because mon could also be an int. A better place is when looking the MONTHS_LOWER array index (and possible exception is handle): try: mon = MONTHS_LOWER.index(mon[:3].lower())+1 (perhaps in 2 sentences for clarity) OK, waiting for experts' comments. I'm really enjoying Python. -- ___ Python tracker <https://bugs.python.org/issue34951> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com