在一個空白的 Delphi 11 專案中,我洗掉了一個按鈕和一個 TIdHTTP 組件。
該按鈕嘗試獲取 .txt 檔案。
procedure TForm1.Button1Click(Sender: TObject);
var
Stream: TMemoryStream;
begin
Stream := TMemoryStream.Create;
try
IdHTTPGetProgramUpdateFile.Get('https://www.bookup.com/cowupdates/build129.txt',
Stream);
except
on E: Exception do
begin
MessageDlg(E.Message,
TMsgDlgType.mtInformation,
[TMsgDlgBtn.mbOK],
E.HelpContext);
end;
end;
Stream.SaveToFile('downloaded.txt');
Stream.Free;
end;
如果 Windows 專案請求帶有 https 的 URL,則錯誤為“無法加載 SSL 庫”。
如果 Windows 或 Macintosh 上的專案請求帶有 http 的 URL,則錯誤為“301 永久移動”。(該檔案在網站上。)
如果專案在帶有 https 的 Macintosh 上運行,則 PAServer 報告專案“正在以不??安全的方式加載 libcrypto”。
在 Windows 上運行時,該專案IdSSLOpenSSL.pas在源代碼注釋中引發例外:
這里的例外可能意味著您使用了錯誤版本的 openssl 庫。請參閱此檔案頂部的注釋。
檔案頂部的評論對我沒有用。
我正在嘗試從網站下載文本檔案的內容,但我對互聯網協議知之甚少。我錯過了什么?
uj5u.com熱心網友回復:
如果 Windows 專案請求帶有 https 的 URL,則錯誤為“無法加載 SSL 庫”。
您依賴于TIdHTTP使用 Indy 的默認TIdSSLIOHandlerSocketOpenSSL組件,該組件依賴于 OpenSSL 1.0.2 庫檔案(即libeay32.dll和ssleay32.dll等),因此請確保將這些檔案與您的應用程式一起部署,最好是在您應用程式的安裝檔案夾中。或者,如果需要,Indy 確實有一個IdOpenSSLSetLibPath()函式,您可以在應用程式啟動時呼叫它來指定庫所在的備用檔案夾路徑。
如果 Windows 或 Macintosh 上的專案請求帶有 http 的 URL,則錯誤為“301 永久移動”。(該檔案在網站上。)
301是重定向回應。服務器告訴您您請求的 URL 是舊的,并且資源在不同的 URL 上可用(在這種情況下,它可能會將您重定向到 HTTPS url),它將在TIdHTTP.Response.Location屬性中提供給您,并在該TIdHTTP.OnRedirect事件。
如果您已TIdHTTP.HandleRedirects設定為true(false默認情況下),TIdHTTP則將自動為您重新請求新 URL。否則,它會將 視為301錯誤條件,您必須自己手動請求新 URL。
如果專案在帶有 https 的 Macintosh 上運行,則 PAServer 報告專案“正在以不??安全的方式加載 libcrypto”。
默認情況下,在基于 Nix 的系統上,Indy 嘗試使用未版本化的符號鏈接加載 OpenSSL 庫檔案,如果失敗,則它會回退到加載特定版本的庫檔案。使用符號鏈接并不安全,因為它們可能映射到您不期望的庫版本。例如,在現代系統上,OpenSSL 未版本化符號鏈接可能映射到TIdSSLIOHandlerSocketOpenSSL不支持的OpenSSL 1.1.x 或更高版本的庫檔案(改用此 SSLIOHandler)。印有IdOpenSSLSetCanLoadSymLinks()和IdOpenSSLSetLoadSymLinksFirst()功能,你可以在應用程式啟動時呼叫,防止印從試圖加載符號鏈接。然后,您可以使用您的應用程式部署特定版本的庫檔案,或將 Indy 指向它們所在的檔案夾。
在 Windows 上運行時,該專案
IdSSLOpenSSL.pas在源代碼注釋中引發例外:這里的例外可能意味著您使用了錯誤版本的 openssl 庫。請參閱此檔案頂部的注釋。
檔案頂部的評論對我沒有用。
您可以WhichFailedToLoad()在錯誤發生后使用 Indy 的函式來找出 Indy 無法加載 OpenSSL 是因為庫檔案失敗或加載,或者它們缺少所需的函式匯出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/381755.html
標籤:德尔福 印地 delphi-11-alexandria
上一篇:如何使請求檔案在WireMock中的另一個之前執行?
下一篇:Delphi停靠表單隱藏面板
