一个关于http的问题(100分)

  • 主题发起人 主题发起人 johnlee4u
  • 开始时间 开始时间
J

johnlee4u

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Delphi3的http控件做了一个下载文件的程序,但是有几个问题。
一、对于有些站点就读不到文件,IE就可以,用delphi附带的程序也是这样( demos/internet/http下 )这是为什么?
二、这个控件好象下载能力比较差,速度比IE还慢,有没有象NET VAMPIRE那样强力下载的方法?

俺的分很少,不然就多给一些了。。 :)
 
1. 这是因为这些站点比较慢,IE的TIMEOUT比较长,可以等待,而HTTP构件没有
长时间等待的缘故。
2. 要想速度快,就象NV那样自己写SOCK连接,HTTP构件的文件解析功能本身也
使速度变慢。自己写的命令,你可以从RFC里得到。
 
如果是站点慢,那就应该是TIMEOUT,可是我的程序也接受到了对方的响应,收到一个说是该站点无此文件的信息。。 这是为什么?

有没有更高效率的HTTP控件???
 
没说么, 要想速度快, 自己写SOCK.
不过, 你可以试试ICS, 也许不错!
SMARTKID.YEAH.NET
 
hehe, 收到无文件的回答可能是因为那是一个虚拟主机,你必须在发送http请求
的时候在里面加上主机名称的请求头

// I'm pegasus
 
除此之外,有些站点屏蔽了Ftp等的功能,所以能看到文件名,而得不到该文件。
 
有些服务器的返回信息可能将地址move了,HTTP1.0中返回代码为302
Netvampire,Netant的原则算法是断点续传,想提高下传的效率
也只能如此了
 
偶就在做类似于NMHTTP控件所做的事,用socket函数编写,比较艰苦!
偶就不看RFC,偶用netxray侦听,看原始的Http包再做分析,各位做过的先辈们
可否有些建议?
 
ics最新的是多少,控件带源码?
 
o^o --;
o^
I am very happay you don't known such a easy qustion!
 
Pegasus is right!
If you do not give a server head in your request,
you may get nothing,

Like:
GET /download/test.zip HTTP/1.0
//Here is a CR - carigge return
//Here is still a CR

You got response:
404 File not found

But if you use:
GET /download/test.zip HTTP/1.0
server:test.com.cn
//Here is CR
//Here is CR
there you might get the file you want!
 
到不如讨论讨论如何断点续传,(或者有没有直接支持的控件)
 
我对断点续传很感兴趣
 
断点续传是HTTP1.1(或者是1.0,不好意思,记不太清了)支持的。

我原来用VC的CInternetFile类(也许是类似名字的,也记不太清了)作了一个。
主要原理是多线程和文件组合,至于断点,用不着操心,rfc规范里面有控制字,
规定从哪个地方开始传,传多长。续传的话,可以存储文件写到何处,然后再
从那个点开始传。

如果大家要的话,下次我可以贴上来,不过这东东在网上哪里都有。
 
这个我很熟,要断电续喘的话,
在请求的时候用HTTP/1.0指明版本号,
在请求头中加上一行:
Range:356-
(此例表示从第356字节开始续喘)
服务端的返回中有
Content-Range:bytes 356-234567
这样的结果,要注意判断知道服务端是不是只持续喘,
如果服务端不支持的话它会从头给你发过来的,所以
要搞清楚了。

具体的实现细节可以请教晓茶兄,或者问我要rfc或者
一些参考代码(我只会用c/c++,抱歉)也可以。


 
多学学socket编程
 
多人接受答案了。
 
后退
顶部