无法返回http.clent getresponse()对象

时间:2017-08-22 11:51:04

标签: python python-3.x

我无法将HTTPResponse对象从被调用的函数传递回调用者。

def caller():
    r = called()
    with open('/some/file/', 'wb') as f:
        f.write(r.read())


def called():
    conn = http.client.HTTPSConnection('/some/host',
                                       'some port',
                                       'some ssl.Context')
    conn.request('GET', '/some/url', {'some': 'headers'})
    r = conn.getresponse()
    conn.close()
    return r

执行上述操作时,会创建文件,但不会写入任何内容。但是,如果我执行以下操作:

def caller():
    r = called()
    with open('/some/file/', 'wb') as f:
        f.write(r)


def called():
    conn = http.client.HTTPSConnection('/some/host',
                                       'some port',
                                       'some ssl.Context')
    conn.request('GET', '/some/url', {'some': 'headers'})
    r = conn.getresponse()
    c = r.read()
    conn.close()
    return c

它通过适当的返回执行正常并写入文件。后者并不理想,因为我需要调用conn.close()来强制服务器连接终止。

问题:

  

为什么我不能返回getresponse()个对象?

1 个答案:

答案 0 :(得分:1)

这是因为在第一种情况下你正在打电话

conn.close()

然后阅读它。