我写了一个函数,传入参数是网络地址,使用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錯誤)。麻煩懂的高手指導一下偶。
原来在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錯誤)。麻煩懂的高手指導一下偶。
不过,楼上的兄弟可以试着访问一下我提供的两个网址。
我的意思是,这两个网址用同一段程序代码执行,其中qq的那个网址不会报错,而新浪的那个网址却会报错。
begin
Result := FPath + FDocument;
if FParams <> '' then begin
Result := Result + '?' + FParams; {Do not Localize}
end;
end;
他将你url里的"=" 转为了 "?", 你可以通过截包工具查看。
IdHttp.pas
搜索ARequest.URL := URL.GetPathAndParams;
改成ARequest.URL := URL.Path + URL.Document + URL.Params;
多谢这位兄弟,我根据你提供的这个代码跟踪进去看了,果然是把=改成了?,可惜我装的这个delphi2010是精简版,Indy10代码不全(也许Delphi2010的测试版也没有完全的代码)不能编译。郁闷啊。
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的错误出来。也没有改过源代码
我已经将delphi的Indy卸载掉装了最新版本10.5.5的,就没问题了。原来的版本好像是10.2.3另外,楼上的,我原来用TurboDelphi2006的时候没有问题,在顶楼已经说明过。因为想试试看新版本的delphi怎么样,所以才装delphi2010beta版本,才有这个问题。