chunk.py 文件源码

python
阅读 34 收藏 0 点赞 0 评论 0

项目:pyload-requests 作者: pyload 项目源码 文件源码
def get_handle(self):
        """
        Returns a Curl handle ready to use for perform/multiperform.
        """
        self.set_request_context(
            self.p.url, self.p.get, self.p.post,
            self.p.referer, self.p.cookies)
        self.setopt(pycurl.WRITEFUNCTION, self.write_body)
        self.setopt(pycurl.HEADERFUNCTION, self.write_header)

        try:
            self.fp.close()
        except AttributeError:
            pass

        # request all bytes, since some servers in russia seems to have a
        # defect arihmetic unit
        filename = self.p.info.get_chunk_name(self.id)
        if self.resume:
            self.fp = lopen(filename, mode='ab')
            self.arrived = self.fp.tell()
            if not self.arrived:
                self.arrived = os.stat(filename).st_size

            if self.range:
                # do nothing if chunk already finished
                if self.arrived + self.range[0] >= self.range[1]:
                    return None

                # as last chunk dont set end range, so we get everything
                if self.id == len(self.p.info.chunks) - 1:
                    range = '{0:d}-'.format(self.arrived + self.range[0])
                else:
                    range = '{0:d}-{1:d}'.format(
                        self.arrived + self.range[0],
                        min(self.range[1] + 1, self.p.size - 1))

                self.log.debug("Chunked resume with range {0}".format(range))
                self.setopt(pycurl.RANGE, range)
            else:
                self.log.debug("Resume File from {0:d}".format(self.arrived))
                self.setopt(pycurl.RESUME_FROM, self.arrived)

        else:
            if self.range:
                if self.id == len(self.p.info.chunks) - 1:  # see above
                    range = "{0:d}-".format(self.range[0])
                else:
                    range = "{0:d}-{1:d}".format(
                        self.range[0],
                        min(self.range[1] + 1, self.p.size - 1))

                self.log.debug("Chunked with range {0}".format(range))
                self.setopt(pycurl.RANGE, range)

            self.fp = lopen(filename, mode='wb')

        return self.c
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号