6

我正在编写一个带有这样的类的 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()(如上面的代码所示
  • 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)
4

2 回答 2

7

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

headers = {'connection': 'close'}
resp, content = h.request(url, headers=headers)
于 2010-04-13T09:38:57.130 回答
2

如果您重用连接,您应该保留 Http 对象。似乎 httplib2 能够以您在第一个代码中使用它的方式重用连接,所以这看起来是一个好方法。

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

于 2009-08-08T14:59:42.480 回答