使用httplib2.Http()对象时的最佳做法

时间:2009-08-08 13:53:35

标签: python httplib2

我正在编写一个pythonic Web API包装器,其中包含类似

的类
import httplib2
import urllib

class apiWrapper:

    def __init__(self):
        self.http = httplib2.Http()

    def _http(self, url, method, dict):
        '''
        Im using this wrapper arround the http object
        all the time inside the class
        '''
        params = urllib.urlencode(dict)
        response, content = self.http.request(url,params,method)

正如您所看到的,我正在使用_http()方法来简化与httplib2.Http()对象的交互。这个方法经常在类中调用,我想知道与这个对象交互的最佳方法是什么:

  • __init__中创建对象,然后在调用_http()方法时重复使用(如上面的代码中所示)< / LI>
  • 或为httplib2.Http()方法的每次调用在方法内创建_http()对象(如下面代码示例中的所示

import httplib2
import urllib


class apiWrapper:

    def __init__(self):

    def _http(self, url, method, dict):
        '''Im using this wrapper arround the http object
        all the time inside the class'''
        http = httplib2.Http()
        params = urllib.urlencode(dict)
        response, content = http.request(url,params,method)

2 个答案:

答案 0 :(得分:7)

提供'连接':标题中的'close'应根据文档在收到回复后关闭连接。:

headers = {'connection': 'close'}
resp, content = h.request(url, headers=headers)

答案 1 :(得分:2)

如果重用连接,则应保留Http对象。似乎httplib2能够像你在第一个代码中一样重用连接,所以这看起来是一个很好的方法。

同时,从对httplib2代码的浅层检查来看,httplib2似乎不支持清理未使用的连接,甚至不知道服务器何时决定关闭它不再需要的连接。如果确实如此,它看起来像是httplib2中的一个错误 - 所以我宁愿使用标准库(httplib)。