如何分析在Python的HTTP日期字符串?(How do I parse an HTTP date

2019-07-19 08:19发布

有一种简单的方法来解析HTTP日期字符串在Python? 根据该标准 ,有几种方式来格式化HTTP日期字符串; 该方法应该能够处理这个问题。

换句话说,我要像“星期三,2009年9月23日22点15分29秒格林尼治标准时间”的蟒蛇时间结构的字符串转换。

Answer 1:

>>> import email.utils as eut
>>> eut.parsedate('Wed, 23 Sep 2009 22:15:29 GMT')
(2009, 9, 23, 22, 15, 29, 0, 1, -1)

如果你想有一个datetime.datetime对象,你可以这样做:

def my_parsedate(text):
    return datetime.datetime(*eut.parsedate(text)[:6])


Answer 2:

>>> import datetime
>>> datetime.datetime.strptime('Wed, 23 Sep 2009 22:15:29 GMT', '%a, %d %b %Y %H:%M:%S GMT')
datetime.datetime(2009, 9, 23, 22, 15, 29)


Answer 3:

httplib.HTTPMessage(filehandle).getdate(headername)
httplib.HTTPMessage(filehandle).getdate_tz(headername)
mimetools.Message(filehandle).getdate()
rfc822.parsedate(datestr)
rfc822.parsedate_tz(datestr)
  • 如果你有一个原始数据流,也可以建一个HTTPMessage或从一个mimetools.Message。 它可能会提供额外的帮助,而查询响应对象的相关信息
  • 如果你正在使用的urllib2,你已经隐藏在文件处理器的HTTPMessage对象通过的urlopen返回
  • 这大概可以解析很多日期格式
  • httplib的是核心

注意:

  • 看了一眼实施,HTTPMessage从mimetools.Message从rfc822.Message继承继承。 两个浮动DEFS是你感兴趣的,也许,parsedate和parsedate_tz(后者)
  • 从email.utils parsedate(_tz)具有不同的实现,尽管它看起来种相同的。

你可以这样做,如果你只有那段绳子,并要分析它:

>>> from rfc822 import parsedate, parsedate_tz
>>> parsedate('Wed, 23 Sep 2009 22:15:29 GMT')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)
>>> 

但让我通过MIME消息举例说明:

import mimetools
import StringIO
message = mimetools.Message(
    StringIO.StringIO('Date:Wed, 23 Sep 2009 22:15:29 GMT\r\n\r\n'))
>>> m
<mimetools.Message instance at 0x7fc259146710>
>>> m.getdate('Date')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)

或通过http消息(响应)

>>> from httplib import HTTPMessage
>>> from StringIO import StringIO
>>> http_response = HTTPMessage(StringIO('Date:Wed, 23 Sep 2009 22:15:29 GMT\r\n\r\n'))
>>> #http_response can be grabbed via urllib2.urlopen(url).info(), right?
>>> http_response.getdate('Date')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)

对?

>>> import urllib2
>>> urllib2.urlopen('https://fw.io/').info().getdate('Date')
(2014, 2, 19, 18, 53, 26, 0, 1, 0)

还有,现在我们现在了解日期格式,MIME消息,哑剧工具及其Python的实现;-)

无论如何,看起来比使用email.utils解析HTTP头更好。



文章来源: How do I parse an HTTP date-string in Python?