Chinaunix首页 | 论坛 | 博客
  • 博客访问: 390127
  • 博文数量: 32
  • 博客积分: 6015
  • 博客等级: 准将
  • 技术积分: 1320
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-06 21:06
文章分类

全部博文(32)

文章存档

2010年(11)

2009年(7)

2008年(14)

我的朋友

分类: Python/Ruby

2008-09-08 16:04:36

处理了etag和lastmodified,和gzip。
避免了重复或许,节省带宽。

#!/usr/bin/env python

import openanything

USER_HTTP_AGENT = 'python http downloader'

class http_downloader():
    def __init__(self,url):
        self.result = {}
        self.result['url'] = url
        self.result['etag'] = None
        self.result['lastmodified'] = None

    def fetch(self):
        f = openanything.openAnything(self.result['url'],self.result['etag'],self.result['lastmodified'],USER_HTTP_AGENT)
        self.result['data'] = f.read()
        if hasattr(f, 'headers'):
             # save ETag, if the server sent one
             self.result['etag'] = f.headers.get('ETag')
            # save Last-Modified header, if the server sent one
            self.result['lastmodified'] = f.headers.get('Last-Modified')
            if f.headers.get('content-encoding') == 'gzip':
                # data came back gzip-compressed, decompress it
                self.result['data'] = gzip.GzipFile(fileobj=StringIO(result['data'])).read()
       if hasattr(f, 'url'):
            self.result['url'] = f.url
            #if f.read success,f has not attr 'status ', so set default here
            self.result['status'] = 200
        if hasattr(f, 'status'):
            self.result['status'] = f.status
        f.close()

    def set_url(self,url):
        if url != self.result['url']:
             self.result['etag'] = None
             self.result['lastmodified'] = None
        self.result['url'] = url

    def debug_print(self):
        print self.result['url']
        print self.result['status']
        print self.result['etag']
        print self.result['lastmodified']
        #print self.result['data']

阅读(1014) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-11-13 23:24:24

看晕了....

chinaunix网友2008-09-08 16:15:30

blog系统缩进有问题,调半天。 使用如下 opener = http_downloader(url) opener.fetch() opener.debug_print()