環境:Ubuntu 12.04 LTS、Indy 10.5.9 rev 4885、Lazarus 1.0.4 /FPC2.6.0。
私の単純なTIdHTTPServerテストプログラムでは、Webブラウザーは、「Hello world!」であるはずの完全な応答ではなく、最後の文字(「!」)のみを表示します。
関数ToBytes
(IdGlobal.pasの6059行目)では、渡されたAValueパラメーターのテキストはまだ正しく、ASrcEncodingはTIdASCIIEncodingであり、ADestEncodingは「ISO-8559-1」であることがわかります。行6061(LBytes:= TIdTextEncoding.Convert(ASrcEncoding、ADestEncoding、LBytes);)を実行した後、LBytes配列には#33とそれに続くゼロが含まれます。
私のサンプルプロジェクト:
program MyHTTPServer;
uses
cthreads,
IdHTTPServer, IdCustomHTTPServer, IdContext, IdSocketHandle, IdGlobal,
SysUtils;
type
TMyServer = class (TIdHTTPServer)
public
procedure InitComponent; override;
procedure OnGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
end;
procedure Demo;
var
Server: TMyServer;
begin
Server := TMyServer.Create(nil);
try
Server.Active := True;
WriteLn('Hit any key to terminate.');
ReadLn;
finally
Server.Free;
end;
end;
procedure TMyServer.InitComponent;
var
Binding: TIdSocketHandle;
begin
inherited;
OnCommandGet := OnGet;
Bindings.Clear;
Binding := Bindings.Add;
Binding.IP := '127.0.0.1';
Binding.Port := 8080;
Binding.IPVersion := Id_IPv4;
end;
procedure TMyServer.OnGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
AResponseInfo.ContentText := 'Hello world!';
end;
begin
IdGlobal.GIdIconvUseTransliteration := True;
Demo;
end.