簡體   English   中英

在Linux / Lazarus上使用Indy OpenSSL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM