我使用Indy 10 Http Client(最新的SVN版本)和SSL Handler(Delphi 7)來獲取https://www.webtide.com/choose/jetty.jsp網站的內容。Indy 10 + SSL =適用於Windows 7,不適用於XP
它可以在Windows 7 x64(在兩個系統上測試)上正常工作,但在WindowsXP x86上(在3個系統上測試),測試應用程序只是掛在TIdHTTP.Get()上,沒有恢復的可能性一個worker-procedure/thread不起作用!)。測試應用程序無法恢復,必須使用任務管理器關閉。
SSL庫(32位x86!)來自這裏:http://slproweb.com/products/Win32OpenSSL.html 但我試過5個來自不同站點的其他版本,結果相同。
這裏是一個壓縮包與源代碼,編譯的可執行文件,和SSL庫:
https://www.dropbox.com/s/pd5soxon0qbnnl0/IndyTest.zip
這裏是源代碼(形式有一個按鈕和兩個記事):
procedure TForm1.Button1Click(Sender: TObject);
var IdHTTP1: TIdHTTP;
sl : TStringList;
SSL1: TIdSSLIOHandlerSocketOpenSSL;
begin
try
try
IdHTTP1 := TIdHTTP.Create(nil);
sl := TStringList.Create;
SSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
SSL1.SSLOptions.Method := sslvSSLv23;
with IdHTTP1 do
begin
ConnectTimeout := 10 * 1000;
ReadTimeout := 10 * 1000;
IOHandler := SSL1;
Request.UserAgent := 'Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.7.3) Gecko/20040924 Epiphany/1.4.4 (Ubuntu)';
Memo2.Text := 'connecting...';
Application.ProcessMessages;
Memo1.Text := Get('https://www.webtide.com/choose/jetty.jsp');
Memo1.Lines.Add ('response: '+ResponseText);
Memo2.Text := 'connected or timeout...';
end;
except
On e: Exception do
Memo2.Text := 'Exception: '+e.Message;
end;
finally
IdHTTP1.Free;
SSL1.Free;
sl.Free;
end;
end;
爲什麼它在WindowsXP上崩潰/掛起?
你的問題是:如果你想做到這一點,你可以通過調用建立TCP/IP連接之後,但在開始SSL握手,例如前
TIdSocketHandle.SetSockOpt()
方法做手工? – 2013-03-12 14:06:39爲什麼它在WindowsXP上崩潰/掛起? – Casady 2013-03-12 14:09:54
難道你不問調試器爲什麼會掛起?暫停程序,調試器會告訴你它在哪裏等待。你可以使用這個代碼連接到任何其他網站,或者它只是這個特定的一個,讓你的程序掛起? – 2013-03-12 14:17:46