我写了一个函数,传入参数是网络地址,使用idhttp的get方法取得该网址的源代码。
原来在Turbo Delphi2006中使用正常。
后来用了Delphi2010(最新的测试版)编译了一下就出错了,估计是两个版本的Indy不同造成。之后就报错:HTTP/1.1 404 Bad Request
我的网络没问题,传入的网址,断点以后,拷贝到IE的地址栏里面也可以正常访问,但为什么会报这个错呢?
是Delphi2010/Delphi2009的Indy跟之前的版本有什么不同?
下面是这个函数的代码
function GetWebPage(const Url: string): string;
var
  idHttp: TIdHTTP;
begin
  idHttp := TIdHTTP.Create(nil);
  Result := idHttp.Get(Url);
  idHttp.Disconnect;
  idHttp.Free;
end; 我目前可以確定的是,最新的Delphi版本裏面的Indy是Indy10,這個問題也不是因為線程才會這樣。
我新做了一個窗口,將放一個Memo控件、一個Idhttp控件,一個按鈕。屬性均是delphi默認的。
按鈕的Click事件中只有一行代碼:
Memo1.Lines.Text:=idhttp1.Get(Url);這樣得到的結果,也是上面的那個錯誤。看來訪問我指定的網頁要設置什麽參數。
Url為http://mail.qq.com時,能正確執行,Url為http://hq.sinajs.cn/list=sh000001,sz399001
時,就報錯(樓上的那個Http1.1 Bad Request錯誤)。麻煩懂的高手指導一下偶。

解决方案 »

  1.   

    IDHttp控件具体是不是如楼上说的那样,我不清楚。因为用的比较少,我也是刚接触的。
    不过,楼上的兄弟可以试着访问一下我提供的两个网址。
    我的意思是,这两个网址用同一段程序代码执行,其中qq的那个网址不会报错,而新浪的那个网址却会报错。
      

  2.   

    indy问题function TIdURI.GetPathAndParams: String;
    begin
      Result := FPath + FDocument;
      if FParams <> '' then begin
        Result := Result + '?' + FParams; {Do not Localize}
      end;
    end;
    他将你url里的"=" 转为了 "?", 你可以通过截包工具查看。
      

  3.   

    改indy代码
    IdHttp.pas
    搜索ARequest.URL := URL.GetPathAndParams;
    改成ARequest.URL := URL.Path + URL.Document + URL.Params;
      

  4.   


    多谢这位兄弟,我根据你提供的这个代码跟踪进去看了,果然是把=改成了?,可惜我装的这个delphi2010是精简版,Indy10代码不全(也许Delphi2010的测试版也没有完全的代码)不能编译。郁闷啊。
      

  5.   

    没有啊,我用d7自己带的indy,你的地址,我都没有抱错这是头Cache-Control: no-cache
    Content-Length: 382
    Connection: Keep-Alive
    Content-Type: application/x-javascript; charset=GBK
    这是内容var hq_str_sh000001="????,2753.345,2753.891,2781.056,2783.621,2729.028,0,0,82726327,87089564277,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2009-06-08,13:36:51";
    var hq_str_sz399001="??3??,10651.179,10667.106,10686.186,10736.392,10524.446,0.000,0.000,738399370,11177649033.360,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,2009-06-08,13:36:51";并没有404的错误出来。也没有改过源代码
      

  6.   

    问题正如pathletboy 所说。
    我已经将delphi的Indy卸载掉装了最新版本10.5.5的,就没问题了。原来的版本好像是10.2.3另外,楼上的,我原来用TurboDelphi2006的时候没有问题,在顶楼已经说明过。因为想试试看新版本的delphi怎么样,所以才装delphi2010beta版本,才有这个问题。
      

  7.   

    恭喜, 装了最新版本10.5.5的,就没问题了10.2.3 版BUG太多, 既然有 10.5.5 ,修改 10.2.3 已无意义, 正如我的BLOG里说的, 原因是因为文本编码器的问题.如果你是使用从 svn 得到的源码, 默认文本编码器是 ASCII, 使用中文根本不能使用, 建议采用经我修改的.http://download.csdn.net/source/1351666