1

我想用 python 编写一个下载器,我使用 PycURL 作为我的库,但是我遇到了一个问题。我无法获得要下载的文件的大小。这是我的代码的一部分:

import pycurl
url = 'http://www.google.com'
c = pycurl.Curl()
c.setopt(c.URL, url)
print c.getinfo(c.CONTENT_LENGTH_DOWNLOAD)
c.perform()

当我在 python shell 中测试这段代码时,没关系,但是当我将它编写为函数并运行它时,它给了我 -1 而不是大小。问题是什么?

(代码已被编辑)

4

3 回答 3

4

这个答案增加了缺失c.setopt(c.NOBODY, 1),并且与几个月前给出的答案相同:

import pycurl

c = pycurl.Curl()
c.setopt(c.URL, 'http://www.alfe.de')
c.setopt(c.NOBODY, 1)
c.perform()
c.getinfo(c.CONTENT_LENGTH_DOWNLOAD)

在调用c.setopt(c.NOBODY, 1)之前调用c.perform()避免下载文件的内容(“无正文”,但所有标题)。

于 2013-02-20T15:55:50.663 回答
2

pycurlCurl 对象的文档中:

除非已经调用并完成了 perform,否则不应调用 getinfo 方法。

你在打电话getinfo之前打电话perform

这是您示例的简化版本,这行得通吗?

import pycurl

url = 'http://www.google.com'
c = pycurl.Curl()
c.setopt(c.URL, url)
c.perform()
print c.getinfo(c.CONTENT_LENGTH_DOWNLOAD)

您应该看到 HTML 内容后跟大小。

于 2012-09-21T02:33:35.483 回答
0

尝试添加调试以查看实际发生的情况。创建 curl 后,请执行以下操作:

def curl_debug(调试类型,味精):
    print("调试: %s %s" % (repr(debug_type), repr(msg)))

c.setopt(pycurl.VERBOSE, 1)
c.setopt(pycurl.DEBUGFUNCTION, curl_debug)
于 2012-09-22T08:41:34.563 回答