0

我有一个使用 DataSnap HTTP 连接到 REST 服务的 Delphi XE2 Win32 应用程序。HTTP 连接使用“Mozilla/3.0 (compatible; Indy Library)”的默认“User-Agent”标头。我想将此更改为更特定于我的应用程序,以便我可以监视来自不同应用程序版本的服务器上的连接。我正在使用 TDSRESTConnection 进行连接 - 任何人都可以指向我需要使用的对象/属性来设置“用户代理”吗?我尝试过使用以下内容:

TDSRESTConnection.HTTP.Request.CustomHeaders.AddValue('User-Agent', 'MyText');

但这没有任何区别。

4

1 回答 1

1

不幸的是,您的自定义标头被清除并忽略TDSRestRequest.GetHTTP(并TDSRestRequest隐藏在Datasnap.DSClientRest单元的实现中)。试试这个解决方法:

uses
  Datasnap.DSHTTP, IdHTTPHeaderInfo;

const
  SUserAgent = 'MyUserAgent';

type
  TDSHTTPEx = class(TDSHTTP)
    constructor Create(AOwner: TComponent; const AIPImplementationID: string); override;
  end;

  TDSHTTPSEx = class(TDSHTTPS)
    constructor Create(const AIPImplementationID: string); override;
  end;

{ TDSHTTPEx }

constructor TDSHTTPEx.Create(AOwner: TComponent; const AIPImplementationID: string);
begin
  inherited Create(AOwner, AIPImplementationID);
  with Request.GetObject as TIdRequestHeaderInfo do
    UserAgent := SUserAgent;
end;

{ TDSHTTPSEx }

constructor TDSHTTPSEx.Create(const AIPImplementationID: string);
begin
  inherited Create(AIPImplementationID);
  with Request.GetObject as TIdRequestHeaderInfo do
    UserAgent := SUserAgent;
end;

initialization
  TDSHTTP.UnregisterProtocol('http');
  TDSHTTP.RegisterProtocol('http', TDSHTTPEx);
  TDSHTTP.UnregisterProtocol('https');
  TDSHTTPS.RegisterProtocol('https', TDSHTTPSEx);

finalization
  TDSHTTP.UnregisterProtocol('http');
  TDSHTTP.UnregisterProtocol('https');

end.
于 2012-06-14T14:49:31.490 回答