[delphi-users:4649] TIdHTTPの使用

797 views
Skip to first unread message

s.i.g

unread,
Mar 31, 2017, 9:53:43 PM3/31/17
to delphi...@freeml.com
こんにちわ

Delphi6+Indy10を使っています。

この構成で、Yahooのページからデータを取得していましたが、
最近、Yahooのページもhttps化して、アクセスできなくなったため、

Mr.XRAYさんのTidHTTPでHTTPSサーバーへのアクセスを試していますが、

http://mrxray.on.coocan.jp/Delphi/plSamples/772_Indy_HTTPGet.htm#07

Loadできず、実行にいたりません。
DLLの保存場所、ライブラリーパスの設定などいろいろ試しましたが、下記のエラーがでます。

プロジェクト *****.exeがEIdOSSLCouldNotLoadSSLLibraryクラスの例外を生成しました。
'Could not load SSL library'

DelphiもIndyも長く使っているだけで詳しくありません。
どなたか、何か情報ありませんか。
よろしくお願いします。

----------------------------
sankayo
san...@gmail.com


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
スカルプケアの常識を凌駕する限界濃度!
髪の奥までぐんぐん届く!?
万が一実感できなければ全額返金いたします。
http://ad.freeml.com/cgi-bin/sa.cgi?id=pNHMP
------------------------------------------------------[freeml byGMO]--

dacho

unread,
Apr 1, 2017, 1:27:41 AM4/1/17
to delphi...@freeml.com
こんにちは。

あまり深く追求していませんが、OpenSSLのバージョンによって
ロードに成功したり失敗したことがありました。
セキュリティ上は最新バージョンを使いたいところですが、
古いバージョンでも試されてはいかがでしょうか。


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
■即戦力人材と企業をつなぐ転職サイト■
ビズリーチに【無料登録】すると・・・
・一流企業の求人情報を閲覧できます
・ヘッドハンターからスカウトが届きます
ビズリーチ【無料登録】ページはこちら
http://ad.freeml.com/cgi-bin/sa.cgi?id=pNJDs
------------------------------------------------------[freeml byGMO]--

s.i.g

unread,
Apr 1, 2017, 6:23:47 AM4/1/17
to delphi...@freeml.com

RESありがとうございます。

古いバージョンも試してみましたが、NGでした。
サンプルも同じなので、Delph6との関係かもしれません。
もう少し、いろいろやってみます。
何か気がついた点でもありましたら、また、お願いします。

-------------------------------------------------------
sankayo



2017年4月1日 14:27 dacho <delphi...@freeml.com>:

dacho

unread,
Apr 1, 2017, 6:43:36 AM4/1/17
to delphi...@freeml.com
そうですか・・・

> Mr.XRAYさんのTidHTTPでHTTPSサーバーへのアクセスを試していますが、
>
> http://mrxray.on.coocan.jp/Delphi/plSamples/772_Indy_HTTPGet.htm#07
>
> Loadできず、実行にいたりません。

こちらのページでちょっと気になったのですが、

> ダウンロードしたファイルに含まれている libeay32.dll と
> ssleay32.dll という 2 つの DLL をプログラムの実行ファイル
> があるフォルダにコピーします.

の部分ですが、もう試されたかもしれませんが libssl32.dll も必要
ではないかと思います。
(Indyのバージョンによるのでしょうか?)


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
スカルプケアの常識を凌駕する限界濃度!
髪の奥までぐんぐん届く!?
万が一実感できなければ全額返金いたします。
http://ad.freeml.com/cgi-bin/sa.cgi?id=pNMwk
------------------------------------------------------[freeml byGMO]--

s.i.g

unread,
Apr 1, 2017, 9:05:58 PM4/1/17
to delphi...@freeml.com

こんにちわ

>もう試されたかもしれませんが libssl32.dll も必要
>ではないかと思います。

入れてみましたが、これもNGでした。
検索すると、同じようなトラブルがけっこうあるようですね。
なかなか難しいです。

------------------------------------------------------
sankayo

Hide

unread,
Apr 1, 2017, 11:55:39 PM4/1/17
to delphi...@freeml.com
sankayoさん、今日は

 直接の回答ではありませんが、下記の方法でhttpsサーバーにアクセスできて
います。 httpsサーバーにアクセスする場合はSSLの設定が必要です。私の
DelphiはXE3と古いものです。
参考まで。


HTTP : TIdHTTP;
SSL : TIdSSLIOHandlerSocketOpenSSL;

IdHttp.Request.Host := S; //アドレスをセット
HTTP := TIdHttp.Create;
SSL := TIdSSLIOHandlerSocketOpenSSL.Create();
MS := TMemoryStream.Create;
Port_No := 443;
Current_URL := 'https://' + S;
try
try
HTTP.IOHandler := SSL;
HTTP.Get(Current_URL, MS);
MS.Position := 0;
Temp_File := Temp_Folder + 'TempURL_000.txt';
MS.SaveToFile(Temp_File); //UNICODEのデータを保存
except
on E: EIdHTTPProtocolException do begin
if E.ErrorCode <> 0 then begin
Return_Code := E.ErrorCode;
Beep;
Showmessage(IntToStr(Return_Code));
Showmessage(Current_URL + ' が見つかりません');
end;
end;
end;
finally
HTTP.Free;
SSL.Free;
end;
----------
越智英昭
----------


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
■即戦力人材と企業をつなぐ転職サイト■
ビズリーチに【無料登録】すると・・・
・一流企業の求人情報を閲覧できます
・ヘッドハンターからスカウトが届きます
ビズリーチ【無料登録】ページはこちら
http://ad.freeml.com/cgi-bin/sa.cgi?id=pNSMB
------------------------------------------------------[freeml byGMO]--

s.i.g

unread,
Apr 2, 2017, 5:00:15 AM4/2/17
to delphi...@freeml.com

こんにちわ

ソースありがとうございます。
実行してみましたが、下記のエラーは同じでした。
どうも、SSLの動作環境が実現できていないようです。

libeay32.dll、ssleay32.dllを、アプリの実行フォルダーへ
保存し、Unitの設定だけで、実行されていますか。

また、SSLの設定ですが、当方はこのUnitを不特定多数が使用する
フリーソフトに組み込む予定なのですが、Delphi側で何か必要と
いうことでしょうか。

 'Could not load SSL library'

-----------------------------------------------------
-2017年4月2日 12:55 Hide <delphi...@freeml.com>:

dacho

unread,
Apr 2, 2017, 5:58:10 AM4/2/17
to delphi...@freeml.com

Indy10のソースコードを見てみました。
'Could not load SSL library'の例外が発生するのは、

Protocols\IdSSLOpenSSL.pas
function LoadOpenSSLLibrary: Boolean;

でエラーとなった場合、もしくは例外が発生した場合です。
エラーは以下の2パターンです。

(1) ssleay32.dll ロードでエラー
  Protocols\IdSSLOpenSSLHeaders.pas
  function Load: Boolean;
  処理:ssleay32.dll をロードしエクスポート関数のアドレス取得

(2) SSL_library_init 関数の戻り値が0以下
  上記(1)で取得したエクスポート関数 SSL_library_init を
  Callし、戻り値が0以下はエラー

例外については、多くの可能性があるので細かく見ていません。

あと、前のメールに書いた libssl32.dll についてですが、
ssleay32.dll がロード出来なかった場合に libssl32.dll を
代わりにロードするようになっていました。


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
スカルプケアの常識を凌駕する限界濃度!
髪の奥までぐんぐん届く!?
万が一実感できなければ全額返金いたします。
http://ad.freeml.com/cgi-bin/sa.cgi?id=pNVy9
------------------------------------------------------[freeml byGMO]--

dacho

unread,
Apr 2, 2017, 7:05:30 AM4/2/17
to delphi...@freeml.com

IdSSLOpenSSLHeaders を uses して WhichFailedToLoad() を呼ぶと
ロードの失敗理由が返されます。
ロード失敗したdll名やアドレス取得に失敗した関数名がわかります。


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
■即戦力人材と企業をつなぐ転職サイト■
ビズリーチに【無料登録】すると・・・
・一流企業の求人情報を閲覧できます
・ヘッドハンターからスカウトが届きます
ビズリーチ【無料登録】ページはこちら
http://ad.freeml.com/cgi-bin/sa.cgi?id=pNVWZ
------------------------------------------------------[freeml byGMO]--

s.i.g

unread,
Apr 2, 2017, 8:43:50 AM4/2/17
to delphi...@freeml.com

いろいろ調べていただいて、ありがとうございます。
情報を参考に、試行錯誤してみることにします。

-----------------------------
sankayo

Mr.XRAY

unread,
Apr 2, 2017, 9:30:20 AM4/2/17
to delphi...@freeml.com
[delphi-users:4649] TIdHTTPの使用 へのレスです.

こんにちわ

>http://mrxray.on.coocan.jp/Delphi/plSamples/772_Indy_HTTPGet.htm#07

私のサイトの記事を利用していただいたのに,動作不良ということなので,
申し訳ありません.

で,やってみました.
動作確認は記事に書いてあるのと同じです.

SSL ライブラリをロードできませんでした.

というエラーが発生して,実行できませんでした.
それで,DLL を個別に LoadLibray で読み込んでみました.
ハンドルが 0 でした.
次に DLL のビットバージョンを調べたら 64 ビットになっていました.
こんなハズはないのですが,記事を書いた時には確かに,記事に書いてある
DLL をダウンロードしてテストしています.
その証拠に動作確認した画像を掲載しています.

スミマセン.言い訳ばかりで.

http://indy.fulgan.com/SSL/ から

openssl-0.9.8r-i386-win32-rev2.zip 2017-04-02 04:08 831K

をダウンロードして,その中の DLL を使用してみてください.
私の方では動作しました.
結果によって,掲載記事を修正したいと思います.
よろしくお願いします.


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
スカルプケアの常識を凌駕する限界濃度!
髪の奥までぐんぐん届く!?
万が一実感できなければ全額返金いたします。
http://ad.freeml.com/cgi-bin/sa.cgi?id=pNXq5
------------------------------------------------------[freeml byGMO]--

s.i.g

unread,
Apr 3, 2017, 1:37:40 AM4/3/17
to delphi...@freeml.com
こんにちわ

作者の方にまで出ていただいて恐縮です。
期待して実行してみましたが、やはり、同じでした。
このDLLに記載されている必要条件が下記になっていて、
当方の環境は、Win7,32Bit,Delphi6,Indy Ver 10.0.52です。
厳密に解釈すると、Requirements以下の環境のようです。

とりあえず、Indyだけでも10.5.5+にアップしてみようと思います。

ありがとうございます。

-----------------------------------------------------------------------------

                         *** Release Information ***

Release Date:     April 10, 2011

Author:           Arvid Winkelsdorf, digivendo GmbH, www.digivendo.com
                  for The Indy Project, www.indyproject.org

Requirements:     Indy 10.5.5+ (SVN Version or Delphi 2009 and newer)

Dependencies:     The libraries have no noteworthy dependencies

Installation:     Copy both DLL files into your application directory

Supported OS:     Windows 2000 up to Windows 7

-----------------------------------------------------------------------------
sankayo

Mr.XRAY

unread,
Apr 3, 2017, 2:34:54 AM4/3/17
to delphi...@freeml.com
[delphi-users:4660] Re: TIdHTTPの使用 へのレスです.

こんにち.Mr.XRAY です.

>このDLLに記載されている必要条件が下記になっていて、

そこまでは確認しませんでした.
そうすると,もう少し古いバージョンの DLL だったら動作する
可能性がありますね.
お手数とは思いますが,結果がわかったら教えていただけると嬉しいです.


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
■即戦力人材と企業をつなぐ転職サイト■
ビズリーチに【無料登録】すると・・・
・一流企業の求人情報を閲覧できます
・ヘッドハンターからスカウトが届きます
ビズリーチ【無料登録】ページはこちら
http://ad.freeml.com/cgi-bin/sa.cgi?id=pPdEE
------------------------------------------------------[freeml byGMO]--

s.i.g

unread,
Apr 3, 2017, 5:39:30 AM4/3/17
to delphi...@freeml.com
こんにちわ


>そうすると,もう少し古いバージョンの DLL だったら動作する
>可能性がありますね.
>お手数とは思いますが,結果がわかったら教えていただけると嬉しいです.

Archiveにあるバージョン不明な古いバージョンも入れてみましたが、
LoadエラーがConnectエラーになったりで、やはり、NGでした。

Indyのアップなどいろいろ試してみて、後日、また、報告します。

Delphiのもう少し新しいバージョンもあるのですが、移行が面倒なのと、
問題なく使えたので、Delphi6を使ってきました。
そろそろ限界かもしれません。

-------------------------------------------------------
sankayo

Mr.XRAY

unread,
Apr 3, 2017, 7:48:21 AM4/3/17
to delphi...@freeml.com
[delphi-users:4662] Re: TIdHTTPの使用 へのレスです.


こんにちは,Mr.XRAY です.

>Indyのアップなどいろいろ試してみて、後日、また、報告します。

私も調べてみましたが,Delphi 6 では無理なようです.
以下の [備考] に追記しておきました.
この記事を書いた当時は Delphi 6 でもテストしています.
その時は必要な DLL が入手可能な状態でした..

[772] [07_HTTPS サーバへのアクセス]
http://mrxray.on.coocan.jp/Delphi/plSamples/772_Indy_HTTPGet.htm#07


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
スカルプケアの常識を凌駕する限界濃度!
髪の奥までぐんぐん届く!?
万が一実感できなければ全額返金いたします。
http://ad.freeml.com/cgi-bin/sa.cgi?id=pPhd0
------------------------------------------------------[freeml byGMO]--

Yama

unread,
Apr 3, 2017, 8:20:23 AM4/3/17
to delphi...@freeml.com
こんばんわ


>私も調べてみましたが,Delphi 6 では無理なようです.
>以下の [備考] に追記しておきました.
>この記事を書いた当時は Delphi 6 でもテストしています.
>その時は必要な DLL が入手可能な状態でした..

了解しました。
やはり、Delphi 6の期限がきたようですね。
ありがとうございます。

------------------------------------------
sankayo
san...@sankayo-jp.com


DEKO

unread,
Apr 3, 2017, 10:52:17 AM4/3/17
to delphi...@freeml.com
Internet Archive に 2010/08/24 のスナップショットが残っていました。
http://web.archive.org/web/20100824204201/http://indy.fulgan.com/ZIP

これが 10.2.3 かと思われます。これよりも新しい日付だと
IndyTiburon.zip なので、2009 用のコードが混じってきます。

"Could not load SSL library"

TidSSLioHandlerSocketOpenSSL.SSLOptions.Method を
sslvSSLv2 -> sslvSSLv23 にすれば解決するとか書いてありますね。
http://stackoverflow.com/questions/1874677/indy-10-1-5-which-ssl-dlls-work-with-delphi-2006

他には...
・SSL 関係の DLL が複数の場所にインストールされていないか?
・Delphi 6 だとマニフェスト付けないと、Windows 10 で問題が出るかも。
とか。

-- 
by DEKO
-----------------------------
 http://ht-deko.com/
 de...@ht-deko.minim.ne.jp
-----------------------------

s.i.g

unread,
Apr 3, 2017, 10:54:30 AM4/3/17
to delphi...@freeml.com

こんばんわ

成功しました。

環境 Win7(32Bit), Delphi 6, indy10.0.52

使用SSL 
下記にある、 indy_OpenSSL096m.zip を使用。

一度このバージョンでテストしていたのですが、その際は、
Load Errorではなく、Connect Errorだったので、テストソース
かもしれないと思い直し、下記のサンプルで成功しました。
これで、Delphi6の寿命もだいぶ伸びそうです。

もう、Delphi6などの古いバージョンを使っている方はいないと
思いますが、Googleがhttps化を強力に推しすすめているので、
1,2行追加していただけると、うれしいです。

-------------------------------------------------------------

var  
  HTTP    : TIdHTTP;
  SSL       : TIdSSLIOHandlerSocketOpenSSL;
  MS:          TMemoryStream;

begin

try

  HTTP := TIdHTTP.Create();
  SSL   := TIdSSLIOHandlerSocketOpenSSL.Create(nil);

  SSL.SSLOptions.Method := sslvTLSv1;
  HTTP.ReadTimeout       := 1000;
  HTTP.ConnectTimeout   := 1000;
  HTTP.IOHandler            := SSL;

  MS   := TMemoryStream.Create;
  MS.Position := 0;
  Temp_File := extractfilepath(Application.ExeName)+'URL_000.txt';

  LSourceFile           := 'https://code.google.com/archive/p/indydocs/';
  HTTP.Get(LSourceFile,MS);
  MS.SaveToFile(Temp_File);

finally
  HTTP.Free;
  SSL.Free;
end;

end;

-------------------------------------------------------
sankayo

Mr.XRAY

unread,
Apr 6, 2017, 10:55:37 AM4/6/17
to delphi...@freeml.com
[delphi-users:4666] Re: TIdHTTPの使用 へのレスです.

こんにちは.Mr.XRAY です.

>これで、Delphi6の寿命もだいぶ伸びそうです。

その後,DEKO さんのレスもあり.
私のサイトの掲示板で展開がありました.
その結果,以下のような記事を書いてみました.
他の方にも参考になれば幸いです

[Indy コンポーネントのインストール]
http://mrxray.on.coocan.jp/Delphi/Others/D6_IndyInstall.htm


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
■即戦力人材と企業をつなぐ転職サイト■
ビズリーチに【無料登録】すると・・・
・一流企業の求人情報を閲覧できます
・ヘッドハンターからスカウトが届きます
ビズリーチ【無料登録】ページはこちら
http://ad.freeml.com/cgi-bin/sa.cgi?id=pPHdj
------------------------------------------------------[freeml byGMO]--

Reply all
Reply to author
Forward
0 new messages