IdHTTPを使用してHTML内のTITLEの抽出をしたいと思って
抽出は出来ているのですが、
特定のURLにアクセスをすると以下のようなエラーが出ます。
特定のURL→https://www.javadrive.jp/php/sample/keijiban/index4.html
エラー
SSLで接続する際にエラーが発生しました。
erro:140944E:SSL routines:SSL3_READ_BYTESsv1 alert Protocol version
以下ソースコード
var
///Title取得変数
s: String;
mm: TMatch;
i: Integer;
begin
///Title抽出してForm.captionに表示
s := IdHTTP1.Get(ComboBox1.text); //Edit1のアドレスからページを取得
mm := TRegex.Match(s, '<title>(.*)</title>'); //正規表現の判定
//取得が成功したか?
if mm.success then
begin
//成功したら正規表現グループの1からタイトルを取得
Form1.Caption := mm.Groups[1].Value;
end
else
begin
//成功しなかったら
Form1.Caption := 'AppTitle';
end;
end;
ググっても情報がなく困っています。ご教示よろしくお願い致します。
ググッたら Mr.XRAYさんのサイトが出てきました
http://mrxray.on.coocan.jp/Delphi/plSamples/772_Indy_HTTPGet.htm#07
IOHandlerに参照させるTIdSSLIOHandlerSocketOpenSSLクラスのSSLOptins.Methodを別の暗号化方式にすると通るかも
他に考えられるのは ssleay32.dllをか暗号化に使ってるDLLが最新版ではないとか?
take様の補足ですが、
TIdSSLIOHandlerSocketOpenSSL
をフォームにドロップ&ドロップして、
以下のように設定すればいいのでは?
IdHTTP1.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:=TIdSSLVersion.sslvTLSv1_2;
takaさん、mamさん アドバイスありがとうございます。
takaさんの
TIdSSLIOHandlerSocketOpenSSL コンポーネントを配置
TIdHTTP コンポの IOHandler プロパティの値をTIdSSLIOHandlerSocketOpenSSL としSSLOptins.Method の値を 「sslvSSLv23」 に設定してみましたが、
以下のようなSSL接続エラーが出ました。
SSL接続エラーが発生しました。
error:1407742E;SSL routines:SSL23_GET_SERVER_HELLO:tlsv1
mamさんの
SSLOptins.Method の値を TIdSSLVersion.sslvTLSv1_2に変更してみましたが
今度は、当初と同じSSLエラーが出るようです。
error:1409442E;SSL routines:SSL3_READ_BYTES_:tlsv1
次に
openssl-0.9.8r-i386-win32-rev2.zip 2017-04-02 04:08 831Kがなかったので
openssl-1.0.2u-i386-win32.zip をダウンロードして
libeay32.dll と ssleay32.dll という 2 つの DLL をプログラムの実行ファイルがあるフォルダにコピーしましたが、今度は
起動時とURL検索後の2回
インデックスが範囲外です(1)とエラーが出ました。
ただ、SSLエラーは出ていないようなので、解決していそうな気がするのですが、、
Form1.Captionの手前で止まっているようです。
何が原因なのでしょうか?
>起動時とURL検索後の2回
>インデックスが範囲外です(1)とエラーが出ました。
>ただ、SSLエラーは出ていないようなので、解決していそうな気がするのですが、、
何かの拍子にIf分内の変数をいじってしまっていたので、それを修正し、
takaさん、mamさんのアドバイス通りしましたらSSLエラーは出なくなりました。
アドバイス下さりありがとうございました。
ツイート | ![]() |