是否可以查看urllib2响应中的数据?

时间:2009-08-20 20:20:30

标签: python html http encoding urllib2

我需要检测HTTP响应中的字符编码。为此,我查看标题,然后如果未在内容类型标题中设置,我必须查看响应并查找“<meta http-equiv='content-type'>”标题。我希望能够编写一个看起来像这样的函数:

response = urllib2.urlopen("http://www.example.com/")
encoding = detect_html_encoding(response)
...
page_text = response.read()

但是,如果我在“detect_html_encoding”方法中执行response.read(),那么调用my函数后的subseuqent response.read()将会失败。

有没有一种简单的方法可以在阅读后查看响应和/或倒带?

2 个答案:

答案 0 :(得分:4)

def detectit(response):
   # try headers &c, then, worst case...:
   content = response.read()
   response.read = lambda: content
   # now detect based on content

当然,诀窍是确保response.read()如果需要将再次返回相同的东西...这就是为什么我们在必要时将lambda分配给它,即如果我们已经需要提取内容 - 确保可以再次提取相同的内容(并再次提取......; - )。

答案 1 :(得分:0)

  1. 如果它位于HTTP标头中(不是文档本身),您可以使用response.info()来检测编码
  2. 如果要解析HTML,请保存响应数据:

    page_text = response.read()
    encoding = detect_html_encoding(response, page_text)