本文主要是介绍使用pycurl获取http请求的content-length,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
import pycurl
from sStringIO import StringIOclass _PyCurlDownload():'''先请求一次,得到要下载的大小Content-Length,再进行download'''def __init__(self, url):self._header = StringIO()self._curl = pycurl.Curl()self._curl.setopt(pycurl.URL, url)self._curl.setopt(pycurl.HEADERFUNCTION, self._header.write)self._hasHeadr = False def getContentLength(self):if not self._hasHeadr:self._curl.setopt(pycurl.NOBODY, 1)self._curl.perform()self._hasHeadr = Truereturn self._curl.getinfo(pycurl.CONTENT_LENGTH_DOWNLOAD)def download(self, writeFunction, progress = lambda a,b,c,d:None):'''block function ,return: HTTP CODE'''c = self._curlc.setopt(pycurl.NOBODY, 0)c.setopt(c.WRITEFUNCTION, writeFunction)c.setopt(c.NOPROGRESS, 0)c.setopt(c.PROGRESSFUNCTION, progress)c.setopt(c.FOLLOWLOCATION, 1)c.setopt(c.MAXREDIRS, 5)c.setopt(pycurl.SSL_VERIFYHOST, 1)c.setopt(pycurl.SSL_VERIFYPEER, 0)try:c.perform()except error, e:c.close()raise AbortException, ecode = int(c.getinfo(c.HTTP_CODE))c.close()return codeif __name__ == "__main__":c = _PyCurlDownload('http://www.baidu.com')cl = c.getContentLength()s = StringIO()c.download(s.write)assert len(s.getvalue()) == clprint len(s.getvalue()) , cl
这篇关于使用pycurl获取http请求的content-length的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!