如何关闭urllib2连接



我使用urllib2制作了一个程序,该程序可以在web上建立大量连接。我注意到,最终这可能是值得DDoS攻击的;我想知道如何在我完成业务后关闭每个连接,以防止此类攻击。

我用来打开连接的代码是:

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://www.python.org)
html = r.read()

我假设您使用urlopen()函数打开它们。其文件说明:

此函数返回一个类似文件的对象,并带有两个附加方法:

作为一个类似文件的对象,它将有一个close方法,您可以调用它:

connection = urllib2.urlopen(url)
# Do cool stuff in here.
connection.close()

更新:使用您添加到问题中的代码:

>>> import urllib2
>>> import cookielib
>>> cj = cookielib.CookieJar()
>>> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
>>> r = opener.open("http://www.python.org")
>>> html = r.read()
>>> r.close??
Type:  instancemethod
Base Class: <type 'instancemethod'>
String Form: <bound method addinfourl.close of <addinfourl at 150857644 whose fp = <socket._fileobject object at 0x8fd48ec>>>
Namespace: Interactive
File:  /usr/lib/python2.6/urllib.py
Definition: r.close(self)
Source:
    def close(self):
        self.read = None
        self.readline = None
        self.readlines = None
        self.fileno = None
        if self.fp: self.fp.close()
        self.fp = None

所以close()方法是存在的,并且实际上做了一些事情:

>>> r.close()
>>> r.read()
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
TypeError: 'NoneType' object is not callable

您的问题非常含糊。

但这里有一个使用后关闭连接的例子:

f = urllib2.urlopen(req)
f.read()
f.close()

一旦获得响应,套接字连接就会自动关闭。因此,您不会显式关闭urllopen对象,而是在套接字级别自动关闭。

相关内容

  • 没有找到相关文章

最新更新