Chinaunix首页 | 论坛 | 博客
  • 博客访问: 584339
  • 博文数量: 69
  • 博客积分: 2204
  • 博客等级: 大尉
  • 技术积分: 808
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-11 22:37
个人简介

..微笑着看着杯中的花茶一片片撑开.. ..透明的花瓣里水破开的声音很轻微..

文章分类

全部博文(69)

文章存档

2018年(1)

2017年(2)

2016年(10)

2015年(8)

2014年(6)

2013年(6)

2012年(4)

2011年(8)

2010年(12)

2009年(12)

分类: Python/Ruby

2010-08-07 11:12:31

昨天通过SOCKET能够读取网络中文件的数据了,趁热打铁今天准备实现第二步。读取网络上文件的部分内容。也就是分块读取。令我高兴的是这个问题其实在那篇perl写的HTTP续传的脚本里已经给出答案了。
 
答案是:
 

print $socket "Range: bytes=2048-10000\n";

 
对服务器提出Range请求。如果服务器支持部分读取和续传功能的话,就可以从任意起始位置了开始了。昨天还以为要用sysseek那样像操作本地文件的文件指针一样来实现,羞愧。不学无术是不行滴。
 
在网上搜索的时候看到这样一个的内容:
 
如果支持部分文件读取的服务器请求成功的话返回的是206。如果不支持那么返回的是200。这是一个很关键的问题,如果是200的话,指针又会移动回文件头来重新读取。
 
还有个问题就是,请求回来的数据都会带个响应的头。这个一般是怎么处理的呢?稍后搞明白了补充在这里。下面要解决的问题就是如何用多线程的方法来实现分块下载了,不知道这么打开的文件能不能实现多线程的读取。
 
待续……
 
~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~~·~·~·~·~·~·~~·~·~·~
(接上面)
 
头还是比较好处理的,找了找基本就是遵循HTTP的规则,报头的结尾是两个\r\n(也就是\r\n\r\n)。
 
考虑到不要有些文本文件恰好也包含HTTP的报头而被误处理,那么只对发出请求后接受的第一段数据做识别处理。这样基本就不会对后面产生影响了。
 
这里顺便补充点其它的内容。
 
以前在终端输出下载的百分比时总是一个接一个的输出,一屏幕很烦。一直很希望只在屏幕上直接显示一个,位置不变,数字自己动就好了。现在找到方法了:
 

printf STDERR "已完成%4.2f"."%!"."\b"x(length($percent)+1),$percent;

 
还得好好去看看输出部分的内容,以前都不知道还可以这样。。。
 
by lanmeibanban
 
2010-08-07

阅读(1302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~