idhttp.pas文件里
property UserAgent: string read FUserAgent write FUserAgent;
.....
  FUserAgent := DefaultUserAgent; // 这是UserAgent的默认值
而DefaultUserAgent = 'Mozilla/3.0 (compatible; Indy Library)'; 我修改了DefaultUserAgent  = 'Mozilla/3.0';
但是如果把idhttp直接放到form上,执行Memo1.Lines.Add(IdHTTP1.Get('http://www.google.cn'));抓到的是这样的
Host: www.google.cn
Accept: text/html, */*
User-Agent: Mozilla/3.0 (compatible; Indy Library) // 这个标识没有改过来如果不放到面板上,而手动创建的话,或者get之前设置IdHTTP1.Request.UserAgent := 'Mozilla/3.0'到的包是正确的
Host: www.google.cn
Accept: text/html, */*
User-Agent: Mozilla  // 这个是改过的DefaultUserAgent的值我搜索过indy目录下修改FUserAgent 的地方。没发现 Mozilla/3.0 (compatible; Indy Library) 这个串是那里来的。
IdHTTP.dcu删除后重编译indy.dpk也不行。
怀疑indy是对'Mozilla/3.0 (compatible; Indy Library)'这个标识做了保护的,如果是的话它是怎么做到的。
又或者还有地方修改了FUserAgent 我没发现到。

解决方案 »

  1.   

    直接在设计期创建的对象是使用的.bpl当中的代码,所以你修改了.pas当中有并没有用,而这个会被当作资源写入到.frm文件当中去.除非你把整个Indy控件包全部重新编译过.
      

  2.   

    楼上的是一种方法, 还有一种方法就是把idhttp.pas加入到当前项目中(在Project Manager看得到), 那么就优先编译的
      

  3.   

    我试过重新编译indy.dpk和dclindy.dpk,但是不行。
      

  4.   

    重新编译之后,有没有安装成功.最好是先将原来的.bpl删除掉.
      

  5.   

    是加到dpr文件里么?Project Manager是在那里的?
    program Project1;uses
      IdHTTP in '..\..\..\..\Program Files\Borland\Delphi6\Source\Indy\IdHTTP.pas',
      Forms,
      Unit1 in 'Unit1.pas' {Form1};这个试过也不行。
      

  6.   

    这个是没有用的,楼主说的是在Form Designer当中拖进去一个控件,而这个控件创建的时候就会自动生成一个默认值.
      

  7.   

    我把indy卸载了,并删除indy60.bpl,dclindy60.bpl,和dcu,重编译,重安装,还是不行。
      

  8.   

    程序启动创建idhttp时使用的还是DefaultUserAgent  = 'Mozilla/3.0',
    但是后来被窗体的
    TCustomForm.ValidateRename修改了成Mozilla/3.0 (compatible; Indy Library)了。