Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi DataSnap-更改';用户代理';客户端连接中的HTTP头属性_Delphi_Http_Delphi Xe2_User Agent_Datasnap - Fatal编程技术网

Delphi DataSnap-更改';用户代理';客户端连接中的HTTP头属性

Delphi DataSnap-更改';用户代理';客户端连接中的HTTP头属性,delphi,http,delphi-xe2,user-agent,datasnap,Delphi,Http,Delphi Xe2,User Agent,Datasnap,我有一个Delphi XE2 Win32应用程序,它使用DataSnap HTTP连接到REST服务。HTTP连接使用默认的“用户代理”头“Mozilla/3.0(兼容;Indy Library)”。我想将其更改为更特定于我的应用程序的内容,以便我可以从不同的应用程序版本监控服务器上的连接。我正在使用TDSRESTConnection建立连接-有人能告诉我设置“用户代理”需要使用的对象/属性吗?我尝试使用以下方法: TDSRESTConnection.HTTP.Request.CustomHea

我有一个Delphi XE2 Win32应用程序,它使用DataSnap HTTP连接到REST服务。HTTP连接使用默认的“用户代理”头“Mozilla/3.0(兼容;Indy Library)”。我想将其更改为更特定于我的应用程序的内容,以便我可以从不同的应用程序版本监控服务器上的连接。我正在使用TDSRESTConnection建立连接-有人能告诉我设置“用户代理”需要使用的对象/属性吗?我尝试使用以下方法:

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

但这没有任何区别。

不幸的是,您的自定义头在
tdsrestrest.GetHTTP
中被清除和忽略(并且
tdsrestrest
隐藏在
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.

您好,非常感谢您的回复。请原谅,您是否可以确认您发布的代码将放置在Datasnap.DSClientRest单元中,或者可以将其作为新单元添加到我的项目中?您好,抱歉,我不够清楚。将代码放在您自己的任何单元中。我编写此代码是为了避免修改原始Datasnap源代码。否则,您可以简单地在
TDSRestRequest.GetHTTP
中修复它。太棒了,我不太明白它是如何工作的,但它是如何工作的!非常感谢。