Delphi DataSnap - 在客户端连接中更改“User-Agent”HTTP头属性

时间:2012-06-14 07:58:56

标签: delphi http delphi-xe2 user-agent datasnap

我有一个Delphi XE2 Win32应用程序,它使用DataSnap HTTP连接到REST服务。 HTTP连接使用默认的' User-Agent'标题为' Mozilla / 3.0(兼容; Indy图书馆)'。我想将此更改为我的应用程序更具体的内容,以便我可以从不同的应用程序版本监控服务器上的连接。我使用TDSRESTConnection建立连接 - 任何人都可以指向我需要使用的对象/属性来设置用户代理'?我尝试过使用以下内容:

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

但这并没有任何区别。

1 个答案:

答案 0 :(得分: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.