使用pycurl获取文件大小

问题描述 投票:0回答:3

我想用 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 而不是大小。 有什么问题吗?

(代码已编辑)

python pycurl
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()
可以避免下载文件内容(“无正文”,但所有标头)。


2
投票

来自 Curl 对象的

pycurl
文档:

除非调用了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 内容,后跟尺寸。


0
投票

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

defcurl_debug(debug_type, msg):
    print("调试:%s %s" % (repr(debug_type), repr(msg)))

c.setopt(pycurl.VERBOSE, 1)
c.setopt(pycurl.DEBUGFUNCTION,curl_debug)
© www.soinside.com 2019 - 2024. All rights reserved.