01 December
2004

Indy を使って Webサーバのリソースを Getする

[misc] 

The Indy Project のライブラリは、Delphi や C++Builder に付属する優れもののインターネットアプリケーション用ライブラリである。これを使えば、簡単に HTTPクライアントやサーバが作れるのだ。どれぐらい簡単かというと、こんな感じ(但し、エラー処理は別途必要)。サンプルは Borland C++ Builder Professional Version 6 で作成してみた。

TFileStream *fstream = new TFileStream("C:\\test.log", fmCreate);

IdHTTP = new TIdHTTP(NULL);
IdHTTP->Get("http://www.randynetwork.com/", fstream);

たったこれだけのプログラムで、http://www.randynetwork.com/ のリソースを、C:\test.logに保存できてしまうのだ。


Posted by Satoshi at 01:50 | Trackbacks (0) | このエントリーを含むはてなブックマーク
Trackbacks
Please send trackback to:http://www.randynetwork.com/blog/174/tbping
VCL.NETでTIdHTTP(Indy10)を使う場合


Delphi2005 VCL.NETでTIdHTTPを使った場合
TIdHTTP.Get(AURL: string): string; overload;を使えばURL上の本文を
取ってこれるがVCL.NETでは文字化けしてしまう。
TidHTTPにはprocedure Get(AURL: string; AResponseContent: TStream); overload;などが
overloadされているので、これを利用する。
文字化けしないfunctionの作り方


function TForm1.GetHttpToStr(const stUrl: String): String;
var
Enc : Encoding;
FIdHttp : TIdHTTP;
ms : TMemoryStream;
ba : TBytes;
begin
Enc := Encoding.Default;//←URLのテキスト本文がShiftJisの場合
//Enc := Encoding.UTF8;//←URLのテキスト本文がutf-8の場合
ms := TMemoryStream.Create;
FIdHttp := TIdHTTP.Create;
try
FIdHttp.Get(stUrl, ms);
ms.Position := 0;
SetLength(ba, ms.Size);
ms.Read(ba, 0, ms.Size);
Result := Enc.GetString(ba);
finally
FIdHttp.Free;
Enc.Free;//←いらないかも
ms.Free;
end;

end;
//↓functionを呼んで使う場合
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Text := GetHttpToStr('http://127.0.0.1/cgi-bin/test.exe');
end;



残念ながら今のところEUCには対応していない。

Posted by: 毛利春幸のブログ at September 28,2005 15:00