[英]Using Indy OpenSSL on Linux / Lazarus
我想通過Indy的一部分Lazarus組件TIdHTTP
檢索Google搜索的結果。
我看到這個了。 我可以使用CUrl來檢索一些結果。
要對TIdHTTP
做同樣的TIdHTTP
,我TIdHTTP
:
queries:= TStringList.Create;
engine := 'http://www.google.com/search';
queries[0] := '?q=inurl:"foo"';
for i := 0 to queries.Count-1 do
begin
Memo1.Lines.Add('Asking for : ' + engine + queries[i]);
try
IdHTTP1.Get(engine+queries[i], response);
response.Position := 0;
Memo2.Lines.LoadFromStream(response);
finally
response.Free;
end;
end;
IdHTTP
組件的UserAgent
屬性設置為Firefox/12.0
(屬性瀏覽器>請求> UserAgent> Firefox / 12.0,使用大寫F)。 但是,這給了我這個錯誤:
"Project project1 raised exception class EIdIOHandlerPropInvalid with the message 'IOHandler value is not valid'"
In file 'xyz ... IdHTTP.pas at line 939
raise EIdIOHandlerPropInvalid.Create(RSIOHandlerPropInvalid)
那是從德語翻譯成英語的。
搜尋錯誤會導致在SO上出現此問題 。 我意識到這與將HTTP請求重定向到http s服務器有關。 但是,其他SO問題的答案針對Windows平台。
問題 :
誰能幫助我告訴我如何在不存在上述DLL(libeay32.dll,ssleay32.dll)的Linux平台上實現相同的功能?
我已經嘗試過不關心DLL的解決方案-導致出現新錯誤:
"Project project1 has raised exception class EIdOSSLCouldNotLoadSSLLibrary with the message 'Couldn't load SSL library'"
注意事項 :
已安裝core / openssl 1.0.2.k-1。 Linux是Manjaro(64位)。
EIdIOHandlerPropInvalid
表示已指示TIdHTTP
發送HTTPS請求,但尚未為TIdHTTP.IOHandler
屬性分配SSLIOHandler組件(例如TIdSSLIOHandlerSocketOpenSSL
)來處理加密。
由於要向HTTP URL發送請求,因此這意味着服務器必須將HTTP重定向發送回HTTPS URL,並且TIdHTTP.HandleRedirects
屬性設置為true。
您必須分配一個SSLIOHandler組件,以便TIdHTTP
發送HTTPS請求。 如果您直接將請求發送到HTTPS URL, TIdHTTP
可以為您處理該分配(有關詳細信息,請參見此博客文章 ),但是由於您是首先發送到HTTP URL,因此您必須事先手動分配IOHandler。
您閱讀的有關Windows的解決方案也適用於其他平台,包括Linux。 您只需要分發適當的OpenSSL二進制文件(如果它們不存在)(Linux使用.so
文件,而不是.dll
文件),並可以選擇在運行時調用Indy的IdOpenSSLSetLibPath()
函數,以使Indy知道二進制文件的位置。
您不僅限於OpenSSL。 恰好是Indy選擇的默認SSL / TLS庫。 但是,只要可以找到(或編寫)自定義TIdSSLIOHandlerSocketBase
派生的類來包裝它,就可以使用所需的任何SSL / TLS庫。 一些第三方SSL / TLS庫確實提供了Indy IOHandler類(例如,Eldos SecureBlackBox)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.