ううーー、何週間かぶりに書きます。
サーバ引っ越しまして、せっかくなんでテーマもリニューアルしてから更新しようと思ってましたが、そのテーマのアイディアがとんと浮かばず、放置しておりました。
さて、はたと思いついて、久々にDelphi触ってました。やっぱいいですよね、静的言語。最近すっかりWebアプリ絡みの案件ばっかりと付き合わされてる身としては、コンパイラとかデバッガのメッセージがやけに親切に感じまして。
[エラー] Unit1.pas(xx): 宣言 が必要な場所に 'xxx' があります [致命的エラー] Project1.dpr(xx): 'Unit1.pas' ユニットはコンパイルできませんでした
とか、軽くツンデレな人格が伺えてしまうのも、気のせいではありますまい。
Turbo DelphiでIndy使って指定のSSLサイトをGetするだけの簡単なお仕事です、状態だったんですけど、
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdHTTP, IdSSLOpenSSL, StdCtrls, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Memo1: TMemo;
Button1: TButton;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
HTTP: TIdHTTP;
SSL: TIdSSLIOHandlerSocketOpenSSL;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
SSL.SSLOptions.Method := sslvTLSv1;
HTTP.ReadTimeout := 1000;
HTTP.ConnectTimeout := 1000;
HTTP.IOHandler := SSL;
Memo1.Text := HTTP.Get('https://example.jp/test.php');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
HTTP := TIdHTTP.Create();
SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
HTTP.Free;
SSL.Free;
end;
end.
何度やってもデバッガちゃんに「Could not load SSL library」と怒られます。Indyは海外製のコンポーネントなんで、デバッガの中の人も金髪のお嬢さんなんでしょうな、なんとなく。
とりあえずssleay32.dllとlibeay32.dllを、http://indy.fulgan.com/SSL/にある最新のバージョンに入れ替えてみることに。が、NG。あらかじめDelphi5で似たようなの作ってたんで、そのときのバージョンに差し替えてみても、やっぱりだめ。これって本当にバージョンの問題か?
うーん、困った。と、よくよくhttp://indy.fulgan.com/SSL/のページを見てみると、「Archive」とかあるので、試しに覗いてみると、結構古いバージョンのもありまして、更新日時から推測するにTurbo Delphi発表当時に使われていたあろうブツ(indy_OpenSSL096m.zip)を仕入れ、インストール。
はい、動きました!
デバッガちゃんに叱られるの快感になりかけてまして。危ない危ない。