我想用 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 而不是大小。 有什么问题吗?
(代码已编辑)
这个答案添加了缺失的
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()
可以避免下载文件内容(“无正文”,但所有标头)。
来自 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 内容,后跟尺寸。
尝试添加调试以查看实际发生的情况。创建卷曲后,请执行以下操作:
defcurl_debug(debug_type, msg): print("调试:%s %s" % (repr(debug_type), repr(msg))) c.setopt(pycurl.VERBOSE, 1) c.setopt(pycurl.DEBUGFUNCTION,curl_debug)