D7+Indy 9.0代码如下: 
unit Unit1; interface uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, 
  IdHTTP, StdCtrls; type 
  TForm1 = class(TForm) 
    idhtp1: TIdHTTP; 
    btn1: TButton; 
    mmo1: TMemo; 
    Edit1: TEdit; 
    procedure btn1Click(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; var 
  Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); 
var 
  s :string; 
begin 
  s:=idhtp1.Get(edit1.text); 
  mmo1.Text :=s; 
end; end. 访问如http://www.0591qs.cn/div/article.php?type=blog&itemid=1  
http://www.winu.cn/viewthread.php?tid=6295  
 发现很多像这样的PHP网页根本没有完全读入,但是也会被GET认为已经读完了,所以得到的代码就是不完整的,偶重试了20次读取,会有1,2次可以完全读入,到底是什么原因啊,偶从没看过有人有这种原因啊!  
idhttp get()判断是否完全读完的根据是什么啊? 
一般读入不完整时,读取的速度都非常快,2,3秒就完成了,而能完整读入的,一般都要3秒以上,而且现在只发现在PHP类的网页上比较多,其它的暂时没有发现 

解决方案 »

  1.   

    Indy9还真没用过,Indy10.2版本貌似没有类似问题,
      

  2.   

    Indy9的TIdHttp处理HTTP数据的时候存在一些问题,建议更新一下试试看。建议在出现认为有问题的情况下导出所有TIdHTTP取得的原始数据内容,看看是否真的读取完毕(对于非chunked格式,根据HTTP头当中的Content-Range判断,Chunked格式以0长度为结束)。
      

  3.   

    你是不是把idhttp.get的string内容赋值给了memo?以前也遇到过,是memo的问题,比如str:=idhttp1.get('http://www.0591qs.cn/div/article.php?type=blog&itemid=1');
    memo1.Text:=str;
    showmessage(inttostr(length(str)));
    showmessage(inttostr(length(memo1.Text)));show出来的长度是不一样的实际的str里面已经是完整的内容了,不信你可以用Visual Sniffer拦截tcp数据包,每次get都返回了完整的数据也可以var
       aaa:Tmemorystream;
    begin
    aaa:=Tmemorystream.Create;
    idhttp1.get('http://www.0591qs.cn/div/article.php?type=blog&itemid=1',aaa);aaa.SaveToFile('d:\aaa.txt');
    showmessage(inttostr(aaa.Size));
    aaa.free;
    end;d:\aaa.txt 里每次都能保存下完整的内容
      

  4.   

    果然还真是skylkj 所说的问题啊!谢谢 了,这个问题困扰了我好久,因为大家都没遇上过,所以上网找答案都没有,其实也不是太难的问题,只不过检查的方法不正确,偶根本没有意识过看长度来找,被MEMO误导了