2017/4/5 (水) 18:04:54 taka |
▼ Mr.XRAYさん
> > [07_HTTPS サーバへのアクセス]
> > http://mrxray.on.coocan.jp/Delphi/plSamples/772_Indy_HTTPGet.htm#07
>
> [備考] の文章を書き換えました.
> 『Delphi 2007 以前では使用でき...』
> と書いていましたが,使用できないと決め打ちにすると語弊があるので.
> どうにでも,あるいは読んだ方が自由に解釈可能な文章にしてみました.
Indy最新版(10.6.2)は、古いDelphiでも動きます。
・IndyのバグでIndy最新版を古いDelphiでコンパイルできない期間がしばらくありました
2015年末くらいからは、コンパイルできています
・ライブラリのパスが間違っている
・コンポーネントパレットが古いバージョンになっている
・Indyの仕様が途中でが変わったので、
それにあわせて使用しているIndy関数の引数を変更してないため
アプリのコンパイラエラーになっている
・IndyのバージョンとopensslのDllのバージョンの選択が間違っている
・ windowsフォルダやPATH変数に古いopensslのDllが混ざっている
・ アプリのフォルダに違うバージョンのopensslのDllが混ざっている
のいずれかの理由で 古いDelphiで最新版のIndyが動かないと騒いでいるだけではないでしょうか
●Indy 10.2.3
ローカールにクローン同期しているリポジトリで
branches,tagsの履歴を見ましたが10.2.3の痕跡はないようです。
古いIndyは、trunk にひたすらコミットされていく習性があったので trunkから拾ってはどうでしょうか
trunk/Lib/System/IdVers.incの履歴によると
2444で10.2.3になり
4394で10.2.3から10.5.6に代わっています。
svn checkout https://svn.atozed.com:444/svn/Indy10/trunk indy10.2.3 -r 4393
とすると
最後の10.2.3を取得できます
取得したバージョンから最終コミットを表示すると最後のリビジョンがわかります。
svn log -l 1
とすると
r3962 2009-12-25 15:21:33 +0900 (2009年12月25日 (金))
になりますので10.2.3の最終リビジョンは、3962になります。
(3963-4393は、trunk以外のほかのフォルダにコミットされているので 同じものが返ってきます。)
10.2.3 の範囲 : リビジョン: 2444 - 3962
svn checkout https://svn.atozed.com:444/svn/Indy10/trunk indy10.2.3 -r 3962
●Indy最新版を古いDelphiで使う方法
HDDを探すと捨てたと思っていたDelphi6 personalのインストーラーが残っていたので
Delphi6をWin10にインストールしてみました。
delphi6でも"Indy 10.6.2 - Berlin RTM" を使えるようです
持っていない場合はダウンロードします。
svn checkout "https://svn.atozed.com:444/svn/Indy10/tags/Indy 10.6.2 - Berlin RTM" indy10
(1) 管理モードで コマンドを開く
(2) Indyのフォルダに移動して、コンパイルする
cd indy10\Lib
set path="C:\Program Files\Borland\Delphi6\Bin";%path%
@rem Delphi6用にIndyをコンパイルします
Fulld_6.bat
(3) Delphi6を起動し、コンポーネントを登録する
自動で登録されていないようなので
コンポーネント パッケージのインストール [追加]
さっきのindy10\D6フォルダへ移動する
CTRL押しながら
dclIndyCore60.bpl
dclIndyProtocols60.bpl
を選択して 開く をクリック
OKで閉じる
ブラウザ検索パス
必要に応じてソースコードフォルダを追加してください。(指定しなくても動きます。)
以上で設定は終わりです
テスト indy https
Delphi6 - 新規
パレットから TIdHTTP, TIdSSLIOHandlerSocketOpenSSL,TButtonを貼り付けたあと
以下のコードを貼り付けます。
※ getversion()関数は DelphiのVersionをわかりやすくするため簡易で作りました。
uses IdGlobal;
function getversion() : String;
var s : String;
i : Integer;
begin
Result := 'VER' + IntToStr(Trunc(System.CompilerVersion*10));
with TIdHTTP.Create(nil) do
try
try
s := Get('http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions');
except
Exit;
end;
i := Pos(Result, s);
if (i>0) then
begin
// VERxxx</p></td><td><p>名前</p>
s := Copy(s, i + Length(Result), Length(s));
i := Pos('<p>', s);
if (i>0) then
begin
s := Copy(s, i + 3, Length(s));
i := Pos('</p>', s);
if (i>0) then
begin
Result := Trim(Copy(s, 1, i-1)) + ' : ' + Result;
end;
end;
end;
finally
Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var url, s : string;
begin
url := 'https://www.google.co.jp/';
IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
s := Format('CompilerVersion %s',[getversion()]) + sLineBreak
+ Format('Indy gsIdVersion %s',[gsIdVersion]) + sLineBreak
+ Format('IdHTTP1.Get(''%s'')', [url]) + sLineBreak;
try
s := s + Copy(IdHTTP1.Get(url), 1, 21) + '...';
except on E: Exception do
s := s + E.Message;
end;
ShowMessage(s);
end;
実行結果
CompilerVersion Delphi 6 / C++Builder 6 : VER140
Indy gsIdVersion 10.6.2.0
IdHTTP1.Get('https://www.google.co.jp/')
<!doctype html><html ...
|
|